26

我刚刚将我的应用程序从 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大小后查看

用鼠标调整主窗口大小后查看 用鼠标调整主窗口大小后查看

这些屏幕截图显示,在手动更改停靠小部件的大小后,停靠小部件的行为符合预期。但是,在初始化时,小部件会占用中央小部件的所有可用空间,这是不希望的。

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

4

1 回答 1

4

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

我现在看到了问题。我做了一些实验和研究。它看起来像 Qt 中的一些错误。FlowLayout::heightForWidth总是width在主窗口大小上独立地以相同的值(在我的情况下为 103)调用,这导致高度大于所需的高度(通常窗口更宽)。当主窗口的宽度发生变化时也不会调用它(它应该更新停靠区域的高度)。

于 2016-03-16T09:31:12.013 回答