与Qt 4.8相比,为什么FlowLayout在Qt 5.2中的表现不同?

时间:2014-02-18 12:26:47

标签: qt qt4 qt5 flowlayout qdockwidget

我刚刚将我的应用程序从Qt 4.8.4移植到Qt 5.2.1。我对FlowLayout example code in the Qt docs中提供的FlowLayout课程有疑问。

我有一个QMainWindowQDockWidget停靠在中央小部件的底部。 QDockWidgetFlowLayout个子窗口小部件。在Qt 4.8中,这就像一个魅力,儿童小部件的大小符合DockWidget的标准大小。但是,在Qt 5.2中,DockWidget尝试将其大小增加到最大值(从中央小部件取代)。更改其布局可防止此不良行为。但当然,我故意使用FlowLayout

为了说明问题,我创建了一个最小的例子:

DockWidget的构造函数:

    QGroupBox *generalBox = new QGroupBox("");
    generalBoxLayout = new FlowLayout;
    generalBox->setLayout(generalBoxLayout);

    for(int i=0; i<10; ++i)
    {
        QPushButton *button = new QPushButton("Test", this);
        button->setMinimumWidth(100);
        button->setMinimumHeight(100);
        generalBoxLayout->addWidget(button);
    }

    this->setWidget(generalBox);

有人知道问题是什么以及我如何解决它?

修改 我创建了一个新的最小工作示例,遗憾的是无法重现Qt 4.8和Qt 5.2之间的差异。同样的问题出现在Qt 4.8中,所以我仍然想在这里提出它:

显示底部停靠的dockwidget占据整个垂直空间的初始视图: Initial view showing the bottom-docked dockwidget

使用鼠标调整dockwidget大小后查看 View after resizing the dockwidget with the mouse

使用鼠标调整主窗口大小后查看 View after resizing the mainwindow with the mouse

这些屏幕截图显示,在手动更改dockwidget的大小后,dockwidgets的行为与预期一致。但是,在初始化时,窗口小部件从中央窗口小部件获取所有可用空间,这是不希望的。

有人知道解决方案/解决方法吗?

1 个答案:

答案 0 :(得分:4)

这是Marek R给出的答案。我把它放在这里所以这个问题得到了答案。长久以来,它一直伪装成一个悬而未决的问题。

  

我现在看到了问题。我做了一些实验和研究。它看起来   像Qt中的一些错误。始终会调用FlowLayout::heightForWidth   在主窗口上独立地具有相同的width值(在我的情况下为103)   尺寸,这导致高度大于所需(通常窗口很多   更宽的)。当主窗口的宽度发生变化时也不会调用它   (它假设要更新码头区域的高度。)