我有一个简单的qt应用程序,主窗口内有QTabWidget
。我还有一些QPushButton
(s)和QRadioButton
(s)。
我想要的是,当我手动调整窗口大小或通过最大化/最小化它时,应该以相同的方式调整容器的大小。
换句话说,我想要的是等同于qt C ++中的DockStyle.Fill
我该怎么做?
答案 0 :(得分:9)
在Qt中你必须使用Layouts:
Qt布局系统提供了一种在窗口小部件中自动排列子窗口小部件的简单而强大的方法,以确保 他们充分利用了可用空间。
简而言之,在布局所属的窗口调整大小后,布局中的所有组件都将重新定位到新位置。
以下是使用QVBoxLayout
后对象监视器的样子:
如果您的小部件没有使用布局,它将如下所示:
我们在这里所做的是使基本小部件/ mainWindow具备主要布局。您可以看到按钮是自动对齐的,当您调整窗口小部件的大小时,这些组件将根据布局重新定位:
也许你会发现那些扩展空间很麻烦,所以下一步是在布局中添加Spacer;因此,在调整布局大小时,只有间隔符会拉伸。 (另一种选择是使您的小部件可扩展,请参阅本文末尾的**)
例如,首先我选择A和B(按 Ctrl )并使用QVBoxLayout
。此附加布局不是基本布局,因此以红色矩形突出显示。
然后我选择C和包含A& 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_2 ),它采用了另一种基本布局。
*不要忘记在布局中添加Spacer以根据需要塑造它们。
**您可以在每个小部件(QTabWidget
,QPushButton
等)上设置size policy以使其水平/垂直展开或固定,这与布局策略配合使用。例如,在最开始的例子中,如果我们设置
调整大小时看起来像这样:
答案 1 :(得分:0)
您需要了解如何在应用程序中使用布局
http://qt-project.org/doc/qt-4.8/layout.html
首次尝试快速简单,在Designer中右键单击主窗口,然后从下拉菜单中选择“布局”。例如,您可以在这里选择网格布局。