Pra*_*hal 2 c++ user-interface qt resize widget
我有一个简单的qt应用程序,QTabWidget在主窗口内.我也有一些QPushButton(s)和QRadioButton(s).
我想要的是,当我手动或通过最大化/最小化它来调整窗口大小时,应该以相同的方式调整容器的大小.
换句话说,我想要的是DockStyle.Fill在qt C++中的等价物
我怎样才能做到这一点 ?
在Qt中你必须使用布局:
Qt布局系统提供了一种简单而强大的方法,可以在窗口小部件中自动排列子窗口小部件,以确保它们充分利用可用空间.
简而言之,布局中的所有组件将被重新定位到布局所属的窗口之后的新位置.

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

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

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

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

例如,首先我选择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使其水平/垂直可扩展或固定,这与布局策略配合.例如,如果我们设置,在最开始的例子中
调整大小时看起来像这样:

小智 0
您需要研究如何在应用程序中使用布局
http://qt-project.org/doc/qt-4.8/layout.html
作为快速而简单的首次尝试,您可以在设计器中右键单击主窗口,然后从下拉菜单中选择“布局”。例如,您可以在这里选择网格布局。
| 归档时间: |
|
| 查看次数: |
4301 次 |
| 最近记录: |