Qt布局问题

时间:2010-11-15 09:55:18

标签: qt layout qt4

我实现了一个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(),该事件有效,但绕过布局管理器。

1 个答案:

答案 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);