介绍
Qt Designer,是一个直观可见的全方位 GUI 构造器,它所 设计出来的用户界面能够在多种平台上使用。它是 Qt SDK 的一部分,也是最为重要的开发 工具之一。利用 Qt Designer,我们可以拖放各种 Qt 控件构造图形用户界面并可预览效 果。
与纯代码设计界面的区别
使用designer设计的.ui文件最终还是会生成相应的.h文件,所以使用designer做的工作都可以自己亲自用代码来实现,所以如果用代码来设计界面的话,主要工作就是:
- 创建相关的窗口部件类的对象
- 通过调用成员函数来设置这些部件的一些属性等等
- 创建布局管理器类来布局(想死的话也可以自己手工布局)
- 其他,如添加资源文件,添加动作,设置信号-槽 等等
使用designer来设计界面,大大减少了程序代码量,设计起来也更加方便清晰。
使用方法
-
窗口部件:
- 添加控件:从左侧的部件列表中选中需要的部件,拖到右侧的设计窗口上就可以了
- 复制控件:按住ctrl,鼠标点击要复制的控件,按住向外拉,就得到了复制的控件
- 删除控件:鼠标点击要删除的控件,右键删除或按delete键
- 选中多个控件:鼠标向外拉出一个矩形,覆盖要选中的控件,或者按住ctrl,依次点击要选中的控件
- 控件位置,大小等相关属性:详见属性编辑器和布局
属性编辑器:可以用来编辑控件的相关属性,有从父类Widget继承而来的属性,也有自己控件独特的属性,使用时比较方便。
-
布局管理器的使用:
Qt 的布局管理器负责在父窗口部件区域内构建子窗口部件。这些管理器可以使其中 的窗口部件自动定位并重新调整子窗口部件、保持窗口部件敏感度最小化的变化和默认尺 寸,并可在内容或文本字体更改时自动重新定位。在 Qt Designer 中,完全可以使用布局管理器来定位控件。布局类的继承关系: QLayout 类是 Qt 的几何管理器的基类,它派生自 QObject 类和 QLayoutItem 类,是一 个抽象基类,必须被派生类所重新实现。它的派生类主要有 QBoxLayout, QGridLayout, QFormLayout 以及 QStackedLayout。而 QBoxLayout又派生出QHBoxLayout和QVBoxLayout2个子类。除了这些内建布局器,常用的还有QSplitter分裂器布局,QSpacerItem弹簧。
布局管理器的属性设置:以下图QVBoxLayout为例,layoutLeftMargin,layoutRightMargin。。。这4个属性用于设置布局内的控件距布局边缘(上,下,左,右)的空白距离。layoutSpacing这个属性用于设置布局内的控件之间的空白距离。还有其他一些属性,这里不再列举。
顶级布局:在将所有控件布局完成后,还需要点一下主窗口,然后再选择一种布局,称之顶级布局。如果不设顶级布局的话,控件无法与主窗口建立起联系,这样在主窗口大小改变时控件不能随之变化。
常见布局器的使用及效果
| 布局 | 说明 | 效果 | 详细 |
|---|---|---|---|
| Box水平或垂直布局 | 将选中的界面元素置于一个水平或垂直布局中 | 请看 | |
| Grid栅格布局 | 将选中的界面元素置于一个栅格布局中,每个控件占据一块方形格子 | 请看 | |
| Form表单布局 | 将控件以两列的形式布局在表单中。左列标签label,右列输入控件如LineEdit | 请看 | |
| Splitter分裂器布局 | 创建一个分裂器水平或垂直布局,选中的控件长度可由用户在水平或垂直方向上拖动 | 请看 | |
| Spacer间隔布局 | 像弹簧一样,占据空白空间,用于限制控件扩展和控制控件之间间隔 | 请看 |
4.窗口控件的大小控制
要想在布局时和主窗口大小改变时控制控件的大小,QWidget里有一些方法如下:
- sizeHint:这个属性所保存的QSize的值是一个推荐这个窗体尺寸的一个值,sizeHint() 函数会返回这个推荐值
- minimumSizeHint:与sizeHint一样,只不过这个属性保存的是推荐这个窗体最小尺寸的一个值
- minimumSize和maximumSize:这2个属性保存的是窗体的最小尺寸和最大尺寸,窗体的尺寸被限制在这2个尺寸之间,可以自己设置。
- sizePolicy:这个属性用于设置窗体在 水平/垂直 方向上的伸展属性,在窗体没有被布局的情况下是不起作用的,QSizePolicy::Policy 枚举值有如下几个:
| 属性值 | 描述 |
|---|---|
| QSizePolicy::Fixed | widget 的实际尺寸只 参考 sizeHint() 的返回值,当主窗口在水平/垂直方向上大小改变时它不能随之变化 |
| QSizePolicy::Minimum | 可以随主窗口伸展收缩,不过widget尺寸不能小于sizeHint() |
| QSizePolicy::Maximum | 可以随主窗口伸展收缩,不过widget尺寸不能大于sizeHint() |
| QSizePolicy::Preferred | 可以随主窗口伸展收缩,但在争夺空白空间上没有优势 |
| QSizePolicy::Expanding | 可以随主窗口伸展收缩,在布局时它会尽可能多地去获取额外的空间,也就是比 Preferred 更具优势 |
| QSizePolicy::MinimumExpanding | 可以随主窗口伸展收缩,不过widget尺寸不能小于sizeHint(),同时它比 Preferred 更具优势去获取额外空间 |
| QSizePolicy::Ignored | 忽略 sizeHint() 的作用 |
Ps:影响布局后窗体的大小还有其他因素,比如不同的布局方案就会有影响…