我认为布局只是一个小部件,可以保留更多的小部件。 但现在我发现我无法使用addWidget将其添加到其他小部件中。 例如,如何向QSplitter添加布局?
答案 0 :(得分:4)
QWidget通过layout()
和setLayout(...)
功能内置了对布局的支持。布局对象控制可以添加到布局的不同子窗口小部件的位置。此外,它还确保根据指定的constraints正确调整其父窗口小部件的大小。如果布局还没有父窗口小部件,那么只要布局附加到具有setLayout()
的窗口小部件,它就会设置该父窗口小部件的大小。
但是,有些小部件更像是布局管理器,而不是小部件,例如QSplitter和QTabWidget。例如,考虑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。