首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >QSplitter未正确设置大小

QSplitter未正确设置大小
EN

Stack Overflow用户
提问于 2011-12-12 15:53:20
回答 1查看 2.8K关注 0票数 0

我有一个带有两个小部件的水平QSplitter。我想用一个新的小部件替换右边的小部件,使用户设置的比例保持不变。下面是我目前拥有的代码的简化版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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%的空间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-12 19:03:26

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

  1. 节省了2个小部件的大小;
  2. 增加了第三个小部件。3个小部件的
  3. 设置大小(默认情况下,sizes.at(2)0
  4. 正在删除第二个小部件。

这是因为deleteLater()只调度删除,实际的删除是在您退出swapLayout()方法后处理的。如果可能,请尝试使用delete rightWidget;而不是rightWidget->deleteLater();。或者处理删除rightWidget和添加新and之间的事件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8476995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文