我认为布局只是一个容器,可以在里面放置更多的小部件。但现在我发现我无法使用addWidget将其添加到其他小部件中。例如如何将布局添加到QSplitter中?
我认为布局只是一个容器,可以在里面放置更多的小部件。但现在我发现我无法使用addWidget将其添加到其他小部件中。例如如何将布局添加到QSplitter中?
QWidget内置支持布局,通过layout()
和setLayout(...)
函数。布局对象控制不同子窗口小部件的位置,可以添加到布局中。此外,它会根据指定的约束条件正确调整其父窗口小部件的大小。如果布局尚未有父窗口小部件,则一旦使用setLayout()
将布局附加到窗口小部件上,它将设置该父窗口小部件的大小。
但是,有些小部件更像布局管理器而不是小部件,比如QSplitter和QTabWidget。例如,考虑QSplitter。虽然它是一个单独的小部件,但它呈现了两个可以操作的不同区域。在这种情况下,为两个不同区域设计一个单一的布局管理器并不合理。与QSplitter类似,QTabWidget具有一些行为使得单一的布局不仅是不必要的,而且是无用的。
我认为上述布局和小部件的融合有时会让布局和小部件的分离变得困惑。
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();
QLayout
是布局管理器。它们管理父部件内的小部件的定位和调整大小。根据文档:
例如,将小部件的布局设置为布局是一种优雅且灵活的自动排列子部件以适应其容器的方式。每个小部件通过
sizeHint
和sizePolicy
属性向布局报告其尺寸要求,布局会相应地分配可用空间。
QHBoxLayout
将导致其子小部件水平布局。