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

Pra*_*hal 2 c++ user-interface qt resize widget

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

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

我怎样才能做到这一点 ?

Tay*_*510 9

在Qt中你必须使用布局:

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

简而言之,布局中的所有组件将被重新定位到布局所属的窗口之后的新位置.


如果您使用的是deisgner:

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

在此输入图像描述

2.选择所需的布局

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

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

在此输入图像描述

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();
Run Code Online (Sandbox Code Playgroud)

在你的情况下

这是布局的一个例子:

在此输入图像描述

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


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

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

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

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

在此输入图像描述


小智 0

您需要研究如何在应用程序中使用布局

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

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