gpt4 book ai didi

qt - 与 Qt 4.8 相比,为什么 FlowLayout 在 Qt 5.2 中的行为不同?

转载 作者:行者123 更新时间:2023-12-03 10:30:00 25 4
gpt4 key购买 nike

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

我有一个 QMainWindowQDockWidget停靠在中央小部件的底部。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 占据整个垂直空间的初始 View :
Initial view showing the bottom-docked dockwidget

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

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

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

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

最佳答案

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

I see the problem now. I did some experiments and research. It looks like some bug in Qt. FlowLayout::heightForWidth is always called with same width value (in my case 103) independently on main window size and this leads height bigger then desired (usually window is much wider). Also it is not called when width of main window is changing (it suppose to to update height of dock area).

关于qt - 与 Qt 4.8 相比,为什么 FlowLayout 在 Qt 5.2 中的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21853813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com