在Qt中,您必须使用
布局:
Qt布局系统提供了一种简单而强大的方式,自动排列小部件以确保它们充分利用可用空间。
简而言之,在布局中的所有组件将在所属窗口调整大小后重新定位到新位置。
如果您正在使用设计师:
1. 单击小部件的空白区域以选择它本身(或主窗口,在此处我只使用一个基础小部件进行演示),然后布局选项将被突出显示:
![enter image description here](https://istack.dev59.com/HbcIu.webp)
2. 选择所需的布局
这是使用 QVBoxLayout
后对象监视器的外观:
![enter image description here](https://istack.dev59.com/93YWz.webp)
如果您的小部件不使用布局,它将如下所示:
![enter image description here](https://istack.dev59.com/dxab8.webp)
我们在这里所做的是让基础小部件/主窗口配备一个主布局。您可以看到,当您调整小部件的大小时,按钮会自动对齐,这些组件将根据布局重新定位。
![enter image description here](https://istack.dev59.com/WJbR2.webp)
也许你会觉得那些扩展的空间很恼人,所以下一步是在布局中添加一个
Spacer;这样当布局被调整大小时,只有间隔器会被拉伸。
(另一个选项是使你的小部件可扩展,请参见本文末尾的**)
![enter image description here](https://istack.dev59.com/vJgyz.webp)
3. 此外,您可以将一个布局添加到另一个布局中,创建嵌套布局
例如,首先选择A和B(按下Ctrl),然后使用QVBoxLayout
。这个额外的布局不是基础布局,因此会被红色矩形框标出。
![enter image description here](https://istack.dev59.com/Jn1eh.webp)
然后我选择C和包含A&B的布局,并在它们上面使用
QHBoxLayout
,如下图所示:
![enter image description here](https://istack.dev59.com/ILs3U.webp)
最后,我在基础窗口小部件上使用另一个
QVBoxLayout
作为我的主要布局,就像我们之前做的一样。
![enter image description here](https://istack.dev59.com/dlzr2.webp)
而对象监视器:
![enter image description here](https://istack.dev59.com/3SJ6n.webp)
如果你喜欢敲击键盘的特殊感觉,并且总是手工编写代码:
对于最后一个示例:
QWidget *Form = new QWidget;
QPushButton *pushButton_A = new QPushButton("A");
QPushButton *pushButton_B = new QPushButton("B");
QPushButton *pushButton_C = new QPushButton("C");
QVBoxLayout *verticalLayout = new QVBoxLayout;
QHBoxLayout *horizontalLayout = new QHBoxLayout;
QVBoxLayout *mainLayout = new QVBoxLayout;
verticalLayout->addWidget(pushButton_A);
verticalLayout->addWidget(pushButton_B);
horizontalLayout->addWidget(pushButton_C);
horizontalLayout->addLayout(verticalLayout);
mainLayout->addLayout(horizontalLayout);
Form->setLayout(mainLayout);
Form->show();
在你的情况下
这是一个布局示例:
![enter image description here](https://istack.dev59.com/N2qD0.webp)
请注意,
QMainWidget
有一个
centralwidget 作为基础小部件。此外,每个
QTabWidget
的选项卡都有自己的基础小部件(图片中的
tab和
tab_2),采用另一个基础布局。
*别忘了在布局中添加Spacer以按照您的喜好进行布局。
** 您可以在每个小部件(QTabWidget
,QPushButton
等)上设置大小策略,使它们水平/垂直可扩展或固定大小,这与布局策略相配合。例如,在最初的示例中,如果我们设置:
- 按钮A垂直固定,水平扩展
- 按钮B垂直扩展,水平扩展
- 按钮C垂直扩展,水平固定
当调整大小时,它将如下所示:
![enter image description here](https://istack.dev59.com/lJd5X.webp)