我实现了一个Widget,它基本上是一个按钮列表(代表一个文件结构)。它看起来像这样:
[[recentFolder] // bar
[(stretch)
[folderA], // foo
[folderB], // programs
[folderC], // c:
(stretch)]
[rootDir]] // my computer
我希望你能在我的布局中看到三个小部件:顶部最新文件夹的文件夹按钮,底部根文件夹的文件夹按钮和中间显示许多文件夹按钮的小部件。所有文件夹按钮都是固定的宽度和高度。我在中心小部件的顶部/底部添加了拉伸区域,因为这是唯一应该能够调整大小的小部件(扩展策略的高度)。但是当我调整父窗口小部件的大小时,它看起来像这样:
[[recentFolder] // bar
// empty space does not
// belong to any child
[(stretch)
[folderA], // foo
[folderB], // programs
[folderC], // c:
(stretch)]
// empty space does not
// belong to any child
[rootDir]] // my computer
这意味着中心窗口小部件根本不会获得任何调整大小事件。我需要它来调整大小:
[[recentFolder] // bar
[
// child was resized
(stretch)
[folderA], // foo
[folderB], // programs
[folderC], // c:
(stretch)
// child was resized
]
[rootDir]] // my computer
你可以(应该)看到,我的伸展区域完全没有效果,并且不会像我认为的那样工作。我来自.NET并错过了如何将控件停靠在父级中的方式,因此它们耗尽了所有现有空间。知道如何在Qt 4中做到这一点吗?
现在我正在父母resize事件中调用我的中心孩子setGeometry()
,该事件有效,但绕过布局管理器。
答案 0 :(得分:1)
经过几天的严重 wtf!?后,我发现了我的小工具没有正确调整大小的原因。我仍然不知道为什么会发生这种情况,所以如果有人能够向我解释,他的答案将被标记为正确而不是我的答案。
事实:
我在我的主要小部件上添加了三个小部件,如下所示:
QVBoxLayout* layout = new QVBoxLayout();
this->setLayout(layout);
layout->addWidget(recent, 0, Qt::AlignTop | Qt::AlignCenter);
layout->addWidget(list, 1, Qt::AlignTop | Qt::AlignCenter);
layout->addWidget(root, 0, Qt::AlignTop | Qt::AlignCenter);
一旦删除对齐内容,一切都按预期工作:
QVBoxLayout* layout = new QVBoxLayout();
this->setLayout(layout);
layout->addWidget(recent);
layout->addWidget(list);
layout->addWidget(root);