我刚刚将我的应用程序从Qt 4.8.4迁移到了Qt 5.2.1。我在Qt文档中FlowLayout示例代码提供的FlowLayout
类上遇到了一个问题。
我有一个QMainWindow
,其中包含一个停靠在中央窗口底部的QDockWidget
。
QDockWidget
具有几个子窗口小部件的FlowLayout
。在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 占用了整个垂直空间:
使用鼠标调整 dockwidget 大小后的视图:
使用鼠标调整主窗口大小后的视图:
这些截图显示,在手动更改 dockwidget 的大小后,dockwidget 的行为符合预期。但是,在初始化时,该小部件占用中心窗口的所有可用空间,这是不希望的。
有没有人知道解决方案/变通方法?
FlowLayout::heightForWidth
总是以相同的width
值(在这种情况下为103)调用,与主窗口大小无关,这导致高度比期望的要高(通常窗口要宽得多)。当主窗口的宽度发生变化时,它也没有被调用(它应该更新停靠区域的高度)。 - Marek R