如何使用窗口调整大小来扩展小部件?

时间:2014-06-11 15:42:08

标签: c++ qt user-interface resize widget

我有一个简单的qt应用程序,主窗口内有QTabWidget。我还有一些QPushButton(s)和QRadioButton(s)。

我想要的是,当我手动调整窗口大小或通过最大化/最小化它时,应该以相同的方式调整容器的大小。
换句话说,我想要的是等同于qt C ++中的DockStyle.Fill

我该怎么做?

2 个答案:

答案 0 :(得分:9)

在Qt中你必须使用Layouts

  

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

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


如果您使用的是deisgner:

1。单击窗口小部件的空白区域以选择自身(或主窗口,我在此处仅使用基本窗口小部件进行演示),并且将突出显示布局选项:

enter image description here

2。选择所需的布局

以下是使用QVBoxLayout后对象监视器的样子:

enter image description here

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

enter image description here

我们在这里所做的是使基本小部件/ mainWindow具备主要布局。您可以看到按钮是自动对齐的,当您调整窗口小部件的大小时,这些组件将根据布局重新定位:

enter image description here

也许你会发现那些扩展空间很麻烦,所以下一步是在布局中添加Spacer;因此,在调整布局大小时,只有间隔符会拉伸。 (另一种选择是使您的小部件可扩展,请参阅本文末尾的**)

enter image description here

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

例如,首先我选择A和B(按 Ctrl )并使用QVBoxLayout。此附加布局不是基本布局,因此以红色矩形突出显示。

enter image description here

然后我选择C和包含A& A的布局B,并使用QHBoxLayoutenter 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的每个标签都有自己的基本小部件(图片中的标签 tab_2 ),它采用了另一种基本布局。


*不要忘记在布局中添加Spacer以根据需要塑造它们。

**您可以在每个小部件(QTabWidgetQPushButton等)上设置size policy以使其水平/垂直展开或固定,这与布局策略配合使用。例如,在最开始的例子中,如果我们设置

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

调整大小时看起来像这样:

enter image description here

答案 1 :(得分:0)

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

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

首次尝试快速简单,在Designer中右键单击主窗口,然后从下拉菜单中选择“布局”。例如,您可以在这里选择网格布局。