问:布局和小部件有什么区别?

时间:2010-04-09 16:20:36

标签: user-interface qt qt4

我认为布局只是一个小部件,可以保留更多的小部件。 但现在我发现我无法使用addWidget将其添加到其他小部件中。 例如,如何向QSplitter添加布局?

3 个答案:

答案 0 :(得分:4)

QWidget通过layout()setLayout(...)功能内置了对布局的支持。布局对象控制可以添加到布局的不同子窗口小部件的位置。此外,它还确保根据指定的constraints正确调整其父窗口小部件的大小。如果布局还没有父窗口小部件,那么只要布局附加到具有setLayout()的窗口小部件,它就会设置该父窗口小部件的大小。

但是,有些小部件更像是布局管理器,而不是小部件,例如QSplitterQTabWidget。例如,考虑QSplitter。虽然是一个小部件,但它提供了两个可以使用的不同区域。在这种情况下,两个不同区域的单个布局管理器并不真正有意义。与QSplitter一样,QTabWidget有一些行为使得单个布局不仅不必要,而且无用。

我认为上面的布局和小部件的融合使得布局和小部件的分离有时会让人感到困惑。

答案 1 :(得分:3)

不,布局不是小部件或容器。布局更像是一个附加到窗口的“帮助器”,并找出放置每个小部件的最佳位置。

Qt文档中的这个示例应该有帮助(http://qt.nokia.com/doc/4.2/layout.html):

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);

window->setLayout(layout);
window->show();

答案 2 :(得分:3)

QLayout是布局管理员。它们管理父窗口小部件中窗口小部件的定位和大小调整。来自文档:

  

布局是一种优雅而灵活的方式,可以自动在其容器中排列子窗口小部件。每个小部件通过sizeHint和sizePolicy属性向布局报告其大小要求,布局相应地分配可用空间。

例如,将窗口小部件的布局设置为QHBoxLayout将导致其子窗口小部件水平布局。

您可以详细了解here

相关问题