c++ - 如何通过调整窗口大小来扩展小部件?

标签 c++ qt user-interface resize widget

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

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

我该怎么做?

最佳答案

在 Qt 中你必须使用 Layouts :

The Qt layout system provides a simple and powerful way of automatically arranging child widgets within a widget to ensure that they make good use of the available space.

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


如果您使用的是 deisgner:

1。点击一个widget的空白处选择它自己(或者一个主Window,我这里只用一个base widget来演示),布局选项会高亮显示:

enter image description here

2。选择所需的布局

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

enter image description here

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

enter image description here

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

enter image description here

也许你会觉得那些扩展空间很烦人,所以下一步是添加一个 Spacer到布局;所以当布局调整大小时,只有间隔物会拉伸(stretch)。 (另一种选择是使您的小部件可扩展,请参阅本文末尾的 **)

enter image description here

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

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

enter image description here

然后我选择 C ​​和包含 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 的每个选项卡都有自己的基本小部件(图中的tabtab_2),它们采用另一种基本布局。


*不要忘记添加 Spacer在布局中随心所欲地塑造它们。

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

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

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

enter image description here

关于c++ - 如何通过调整窗口大小来扩展小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24167180/

相关文章:

asp.net - 使用 ASP.Net 进行正确的用户界面设计

c++ - 重新排序 C++ 基于映射的集合的有效方法

c++ - MFC VC++ 自定义复选框图像

c++ - 我可以使用 Qt LGPL 许可证并在没有任何限制的情况下出售我的应用程序吗?

c++ - 如何在 SQLite 数据库中存储枚举

objective-c - 在 Cocoa 中创建半透明、带边框的圆角窗口?

c++ - CPU 指令与持续时间

c++ - ltrace: 在 "library.so"中找不到 .dynsym 或 .dynstr

c# - 在 C++ 中将 int 转换为 little-endian 格式的字节以用于 Azure 中的 blobId

xcode - 如何提高 iOS 7 中工具栏和导航栏上按钮的点击能力