QSplitter未正确设置大小

时间:2011-12-12 15:53:20

标签: qt qsplitter

我有一个带有两个小部件的水平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%的空间。

1 个答案:

答案 0 :(得分:2)

我认为实际的操作顺序是:

  1. 保存2个小部件的大小;
  2. 添加第3个小部件。
  3. 默认设置3个小部件的大小(sizes.at(2)0
  4. 删除第二个小部件。
  5. 这是由于deleteLater()仅计划删除,并且在退出swapLayout()方法后处理实际删除。如果可能,请尝试delete rightWidget;而不是rightWidget->deleteLater();。或者在删除rightWidget和添加新事件之间处理事件。