Qt布局基本原理
1. 为什么需要布局
不了解布局的情况下,我们使用QT Designer往界面上拖放部件时,大多是随意放置的,这对于学习部件的使用是没有太大影响的,但是,对于一个完善的软件,布局管理是必不可少的。无论是想要界面中的部件有一个整齐的排列,还是想要界面能适应窗口的大小变化,都需要进行布局管理。
2. Qt布局管理系统
Qt主要提供了QLayout类及其子类来作为布局管理器,它们可以实现常用的布局管理功能。
使用布局管理器的好处是可以不用为窗口中的每个部件设置其大小和位置,布局管理器会自动对这些部件进行排列,当窗口大小发生变化时,布局还会自动定位和调整部件的大小,当向布局中添加或移除一个部件时,布局也可以自动适应这些情况,总之,使用布局能够自适应很多情形,大大减少了我们的编程负担。
3. Qt布局管理系统相关的类
Qt布局管理系统相关的类的继承关系如下所示:
4. 布局管理器
Qt的布局管理系统提供了强大的机制来自动排列窗口中的所有部件,确保它们有效地使用空间。Qt包含了一组布局管理类,从而在应用程序的用户界面中对部件进行布局,比如QLayout的几个子类,通常将它们称为布局管理器。
所有的QWidget的子类的实例对象都可以使用布局管理器管理位于它们之中的子部件,QWidget::setLayout()函数可以在一个部件上应用布局管理器。一旦一个部件上设置了布局管理器,那么它会完成以下任务:
- 定位子部件
- 感知窗口的默认大小
- 感知窗口的最小大小
- 窗口大小变化时进行处理
- 当内容改变时自动更新
- 字体大小、文本或子部件的其他内容随之改变
- 隐藏或显示子部件
- 移除一个子部件
5. 布局管理器的布局方式
- 由 QHBoxLayout 类实现的水平布局
- 由 QVBoxLayout 类实现的垂直布局
- 由 QGridLayout 类实现的二维网格布局
- 由 QFormLayou 实现的两列表格布局
6. 使用布局管理器的步骤
- 首先创建一个布局管理器类的实例
- 使用该布局管理器实例的addWidget()函数,把需要由布局管理器管理的部件添加进来。还可以使用addLayout()函数把其他布局管理器加进来
- 最后使用QWidget::setLayout()函数为窗口设置布局管理器
- 说明:
- 若为布局指定了父部件,则可以不使用 QWidget::setLayout()函数,反之,调用
QWidget::setLayout()函数安装布局,则可以不为该布局指定父部件。 - 不需要为添加到布局中的部件指定父部件,布局中的部件会自动成为安装布局
的部件的子部件(使用 QWidget::setParent())。注意:子部件的父部件不是布局,
而是安装布局的部件。
- 若为布局指定了父部件,则可以不使用 QWidget::setLayout()函数,反之,调用