QT 控件自适应窗口大小布局

Qt Creator 中为 UI 界面的窗体控件设置自适应窗口大小布局

一般的应用软件除了最大化最小化外都会让窗体中的控件能够自适应的改变大小。C#、Android以及Qt 中都有自己的一套布局方案。而在Qt中我却扰了弯路,确切的说应该是忘记了以前怎样布局的。网上很多人都是去用代码布局的,我觉得既然有了界面布局那就得用起来,所见即所得,改需求也会方便不少。

布局概述

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

Qt 包括一组布局管理类,用于描述 widget 如何在应用程序的界面中布局。当可用空间变化时,这些布局可以自动定位和调整窗口 widget 的大小,确保它们的布局一致。

所有 QWidget 子类都可以使用布局来管理它们的子类。 QWidget::setLayout()函数的作用是: 将布局应用于小部件。当一个布局以这种方式设置在一个小部件上时,它将负责以下任务:

  • Positioning of child widgets 子窗口widget 的位置
  • Sensible default sizes for windows 合理的默认窗口大小
  • Sensible minimum sizes for windows 合理的窗户最小尺寸
  • Resize handling 调整尺寸
  • Automatic updates when contents change 内容更改时自动更新:
  • Font size, text or other contents of child widgets 字体大小,文本或其他内容的子部件
  • Hiding or showing a child widget 隐藏或显示子窗口小部件
  • Removal of child widgets 删除子窗口部件

常用布局方式

常用的布局方式有 Horizontal 水平, Vertical 垂直, Grid 网格, 和 Form Layouts 窗体布局 。善于结合多种布局方式不能界面美观大方,而且也能够使维护或修改布局变得十分惬意。

为 widgets 提供良好布局的最简单方法是使用内置布局管理器:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。这些类继承自QLayout,而QLayout又派生自QObject(而不是QWidget)。要创建更复杂的布局,可以将布局管理器嵌套在彼此内部。为了将界面上的各个组件的分布设计得更加美观,经常使用一些容器类,如 QgoupBox、QtabWidget、QFrame 等。

布局组件 功能
Vertical Layout 垂直方向布局,组件自动在垂直方向上分布
Horizontal Layout 水平方向布局,组件自动在水平方向上分布
Grid Layout 网格状布局,网状布局大小改变时,每个网格的大小都改变
Form Layout 窗体布局,与网格状布局类似,但是只有最右侧的一列网格会改变大小
Horizontal Spacer 一个用于水平分隔的空格
Vertical Spacer 一个用于垂直分隔的空格

布局示例

新建一个项目后,拖进去两个QTextEdit ,如下图所示。

🍧

然后运行起来,发现更改窗体大小时这两个控件不会自适应更改大小,因为我们并没有做布局设计。

未进行布局

那么怎么办呢?

其实很简单只需做个简单的布局即可。在空白处右击,然后选择布局,然后选择栅格布局。重新编译运行一下,就会发现可以动态调整大小啦。😁

🍼

🌿

这次是一个简单的演示,当你的控件很多的时候,你应该进行水平布局、垂直布局、网格布局等操作。

看我瞎拖几个控件,随便布局一下的效果吧。

🍗

😎

另外,若只需要改变便某方向的缩放与否 以及 缩放比例,可以选中界面中的控件,然后在有下角这里就能进行设置。

🍒

控件的sizePolicy说明控件在布局管理中的缩放方式。Qt提供的控件都有一个合理的缺省sizePolicy,但是这个缺省值有时不能适合所有的布局,开发人员经常需要改变窗体上的某些控件的sizePolicy。一个QSizePolicy的所有变量对水平方向和垂直方向都适用。下面列举了一些最长用的值:

A. Fixed:控件不能放大或者缩小,控件的大小就是它的sizeHint。

B. Minimum:控件的sizeHint为控件的最小尺寸。控件不能小于这个sizeHint,但是可以

放大。

C. Maximum:控件的sizeHint为控件的最大尺寸,控件不能放大,但是可以缩小到它的最小

的允许尺寸。

D. Preferred:控件的sizeHint是它的sizeHint,但是可以放大或者缩小

E. Expandint:控件可以自行增大或者缩小

注:sizeHint(布局管理中的控件默认尺寸,如果控件不在布局管理中就为无效的值)

总结

第一要设置顶级布局,即前面说的右击后设置栅格布局。

第二设置好控件的SizePolicy属性,以达到预期希望。