介绍

Qt Designer,是一个直观可见的全方位 GUI 构造器,它所 设计出来的用户界面能够在多种平台上使用。它是 Qt SDK 的一部分,也是最为重要的开发 工具之一。利用 Qt Designer,我们可以拖放各种 Qt 控件构造图形用户界面并可预览效 果。

与纯代码设计界面的区别

使用designer设计的.ui文件最终还是会生成相应的.h文件,所以使用designer做的工作都可以自己亲自用代码来实现,所以如果用代码来设计界面的话,主要工作就是:

  • 创建相关的窗口部件类的对象
  • 通过调用成员函数来设置这些部件的一些属性等等
  • 创建布局管理器类来布局(想死的话也可以自己手工布局)
  • 其他,如添加资源文件,添加动作,设置信号-槽 等等

使用designer来设计界面,大大减少了程序代码量,设计起来也更加方便清晰。

使用方法

  1. 窗口部件:

    • 添加控件:从左侧的部件列表中选中需要的部件,拖到右侧的设计窗口上就可以了
    • 复制控件:按住ctrl,鼠标点击要复制的控件,按住向外拉,就得到了复制的控件
    • 删除控件:鼠标点击要删除的控件,右键删除或按delete键
    • 选中多个控件:鼠标向外拉出一个矩形,覆盖要选中的控件,或者按住ctrl,依次点击要选中的控件
    • 控件位置,大小等相关属性:详见属性编辑器和布局
      使用Qt Designer来设计界面
  2. 属性编辑器:可以用来编辑控件的相关属性,有从父类Widget继承而来的属性,也有自己控件独特的属性,使用时比较方便。

  3. 布局管理器的使用:
    Qt 的布局管理器负责在父窗口部件区域内构建子窗口部件。这些管理器可以使其中 的窗口部件自动定位并重新调整子窗口部件、保持窗口部件敏感度最小化的变化和默认尺 寸,并可在内容或文本字体更改时自动重新定位。在 Qt Designer 中,完全可以使用布局管理器来定位控件。

    • 布局类的继承关系: QLayout 类是 Qt 的几何管理器的基类,它派生自 QObject 类和 QLayoutItem 类,是一 个抽象基类,必须被派生类所重新实现。它的派生类主要有 QBoxLayout, QGridLayout, QFormLayout 以及 QStackedLayout。而 QBoxLayout又派生出QHBoxLayout和QVBoxLayout2个子类。除了这些内建布局器,常用的还有QSplitter分裂器布局,QSpacerItem弹簧。

    • 布局管理器的属性设置:以下图QVBoxLayout为例,layoutLeftMargin,layoutRightMargin。。。这4个属性用于设置布局内的控件距布局边缘(上,下,左,右)的空白距离。layoutSpacing这个属性用于设置布局内的控件之间的空白距离。还有其他一些属性,这里不再列举。
      使用Qt Designer来设计界面

    • 顶级布局:在将所有控件布局完成后,还需要点一下主窗口,然后再选择一种布局,称之顶级布局。如果不设顶级布局的话,控件无法与主窗口建立起联系,这样在主窗口大小改变时控件不能随之变化。

    • 常见布局器的使用及效果

布局 说明 效果 详细
Box水平或垂直布局 将选中的界面元素置于一个水平或垂直布局中 使用Qt Designer来设计界面 请看
Grid栅格布局 将选中的界面元素置于一个栅格布局中,每个控件占据一块方形格子 使用Qt Designer来设计界面 请看
Form表单布局 将控件以两列的形式布局在表单中。左列标签label,右列输入控件如LineEdit 使用Qt Designer来设计界面 请看
Splitter分裂器布局 创建一个分裂器水平或垂直布局,选中的控件长度可由用户在水平或垂直方向上拖动 使用Qt Designer来设计界面 请看
Spacer间隔布局 像弹簧一样,占据空白空间,用于限制控件扩展和控制控件之间间隔 使用Qt Designer来设计界面 请看

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:影响布局后窗体的大小还有其他因素,比如不同的布局方案就会有影响…

相关文章: