我有一个简单的 qt 应用程序,在主窗口中有一个 QTabWidget
。我还有一些 QPushButton
(s) 和 QRadioButton
(s)。
我想要的是,当我手动或通过最大化/最小化调整窗口大小时,它应该以相同的方式调整容器的大小。
换句话说,我想要的相当于qt C++中的DockStyle.Fill
我该怎么做?
最佳答案
在 Qt 中你必须使用 Layouts :
The Qt layout system provides a simple and powerful way of automatically arranging child widgets within a widget to ensure that they make good use of the available space.
简而言之,布局所属的窗口调整大小后,布局中的所有组件将重新定位到新的位置。
如果您使用的是 deisgner:
1。点击一个widget的空白处选择它自己(或者一个主Window,我这里只用一个base widget来演示),布局选项会高亮显示:
2。选择所需的布局
这是使用 QVBoxLayout
后对象监视器的样子:
如果您的小部件不使用布局,它将如下所示:
我们在这里所做的是让基本部件/mainWindow 配备主布局。您可以看到按钮自动对齐,当您调整小部件的大小时,这些组件将根据布局重新定位:
也许你会觉得那些扩展空间很烦人,所以下一步是添加一个 Spacer到布局;所以当布局调整大小时,只有间隔物会拉伸(stretch)。 (另一种选择是使您的小部件可扩展,请参阅本文末尾的 **)
3。此外,您可以将一个布局添加到另一个布局中以创建嵌套布局
例如,首先我选择 A 和 B(按 Ctrl)并使用 QVBoxLayout
。此附加布局不是基本布局,因此以红色矩形突出显示。
然后我选择 C 和包含 A 和 B 的布局,并在它们上使用 QHBoxLayout
,
最后,我使用另一个 QVBoxLayout
作为基本小部件上的主要布局,就像我们之前所做的一样。
和对象监视器:
如果您喜欢敲击键盘的特殊感觉并且总是手工编写代码:
最后一个例子:
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();
在你的情况下
这是一个布局示例:
请注意,QMainWidget
有一个 centralwidget 作为基础小部件。此外,QTabWidget
的每个选项卡都有自己的基本小部件(图中的tab 和tab_2),它们采用另一种基本布局。
*不要忘记添加 Spacer在布局中随心所欲地塑造它们。
** 你可以设置size policy在每个小部件(QTabWidget
、QPushButton
等)上使它们水平/垂直可扩展或固定,这与布局策略配合。例如,在最开始的例子中,如果我们设置
- 按钮A垂直固定,水平展开
- 按钮B垂直展开,水平展开
- 按钮C垂直展开,水平固定
调整大小时看起来像这样:
关于c++ - 如何通过调整窗口大小来扩展小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24167180/