我刚刚将我的应用程序从Qt 4.8.4移植到Qt 5.2.1。我对FlowLayout example code in the Qt docs中提供的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的大小后,dockwidgets的行为与预期一致。但是,在初始化时,窗口小部件从中央窗口小部件获取所有可用空间,这是不希望的。
有人知道解决方案/解决方法吗?
答案 0 :(得分:4)
这是Marek R给出的答案。我把它放在这里所以这个问题得到了答案。长久以来,它一直伪装成一个悬而未决的问题。
我现在看到了问题。我做了一些实验和研究。它看起来 像Qt中的一些错误。始终会调用
FlowLayout::heightForWidth
在主窗口上独立地具有相同的width
值(在我的情况下为103) 尺寸,这导致高度大于所需(通常窗口很多 更宽的)。当主窗口的宽度发生变化时也不会调用它 (它假设要更新码头区域的高度。)