如何随着窗口大小调整来扩展小部件?

5
我有一个简单的QT应用程序,主窗口里面有一个QTabWidget。我还有一些QPushButtonQRadioButton
我的要求是当我手动调整窗口大小或最大化/最小化窗口时,它应该以相同的方式调整容器的大小。换句话说,我想要的是在qt C++中DockStyle.Fill的等价物。
我该怎么做?
2个回答

13
在Qt中,您必须使用布局

Qt布局系统提供了一种简单而强大的方式,自动排列小部件以确保它们充分利用可用空间。

简而言之,在布局中的所有组件将在所属窗口调整大小后重新定位到新位置。

如果您正在使用设计师:

1. 单击小部件的空白区域以选择它本身(或主窗口,在此处我只使用一个基础小部件进行演示),然后布局选项将被突出显示:

enter image description here

2. 选择所需的布局

这是使用 QVBoxLayout 后对象监视器的外观:

enter image description here

如果您的小部件不使用布局,它将如下所示:

enter image description here

我们在这里所做的是让基础小部件/主窗口配备一个主布局。您可以看到,当您调整小部件的大小时,按钮会自动对齐,这些组件将根据布局重新定位。

enter image description here

也许你会觉得那些扩展的空间很恼人,所以下一步是在布局中添加一个Spacer;这样当布局被调整大小时,只有间隔器会被拉伸。 (另一个选项是使你的小部件可扩展,请参见本文末尾的**)

enter image description here

3. 此外,您可以将一个布局添加到另一个布局中,创建嵌套布局

例如,首先选择A和B(按下Ctrl),然后使用QVBoxLayout。这个额外的布局不是基础布局,因此会被红色矩形框标出。

enter image description here

然后我选择C和包含A&B的布局,并在它们上面使用QHBoxLayout,如下图所示:enter image description here 最后,我在基础窗口小部件上使用另一个QVBoxLayout作为我的主要布局,就像我们之前做的一样。

enter image description here

而对象监视器:

enter image description here


如果你喜欢敲击键盘的特殊感觉,并且总是手工编写代码:
对于最后一个示例:
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

请注意,QMainWidget 有一个 centralwidget 作为基础小部件。此外,每个 QTabWidget 的选项卡都有自己的基础小部件(图片中的tabtab_2),采用另一个基础布局。

*别忘了在布局中添加Spacer以按照您的喜好进行布局。

** 您可以在每个小部件(QTabWidgetQPushButton等)上设置大小策略,使它们水平/垂直可扩展或固定大小,这与布局策略相配合。例如,在最初的示例中,如果我们设置:

  • 按钮A垂直固定,水平扩展
  • 按钮B垂直扩展,水平扩展
  • 按钮C垂直扩展,水平固定

当调整大小时,它将如下所示:

enter image description here


我认为你在附录中的解释中稍微把“水平”和“垂直”搞反了。 - MultiVAC

0

你需要了解如何在你的应用程序中使用布局

http://qt-project.org/doc/qt-4.8/layout.html

作为一个快速简单的第一次尝试,在设计师中,您可以右键单击主窗口,并从下拉菜单中选择“布局”。在这里,您可以选择网格布局,例如。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接