我有一个带有两个小部件的水平QSplitter。我想用一个新的小部件替换右边的小部件,使用户设置的比例保持不变。下面是我目前拥有的代码的简化版本:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
splitter = new QSplitter(this);
splitter->setOrientation(Qt::Horizontal);
leftWidget = new QPushButton("left", splitter);
rightWidget = new QPushButton("right", splitter);
splitter->addWidget(leftWidget);
splitter->addWidget(rightWidget);
setCentralWidget(splitter);
}
void MainWindow::swapLayout()
{
QList<int> sizes = splitter->sizes();
rightWidget->deleteLater();
splitter->update();
rightWidget = new QPushButton("new right", splitter);
splitter->addWidget(rightWidget);
splitter->setSizes(sizes);
}
swapLayout()保存大小、删除右侧的小部件、添加新的右侧小部件并尝试重置大小。然而,左边的小部件占据了100%的空间。在不尝试恢复大小的情况下,这两个小部件都占据了50%的空间。
发布于 2011-12-12 19:03:26
我认为实际的操作顺序是:
sizes.at(2)
为0
。这是因为deleteLater()
只调度删除,实际的删除是在您退出swapLayout()
方法后处理的。如果可能,请尝试使用delete rightWidget;
而不是rightWidget->deleteLater();
。或者处理删除rightWidget
和添加新and之间的事件。
https://stackoverflow.com/questions/8476995
复制相似问题