布局基础
1)Qt 布局管理系统使用的类的继承关系如下图:
QLayout 和 QLayoutItem 这两个类是抽象类,当设计自定义的布局管理器时才会使用到,通常使用的是由 Qt 实现的 QLayout 的几个子类。
2)Qt 使用布局管理器的步骤如下:
- 首先创建一个布局管理器类的对象。
- 然后使用该布局管理器类中的 addWidget()函数,把需要由布局管理器管理的部件添加进来。还可使用 addLayout()函数把其他布局管理器添加进来。
- 最后使用 QWidget::setLayout()函数为窗口设置布局管理器。
使用过程中的注意事项: - 若为布局指定了父部件,则可以不使用 QWidget::setLayout()函数,反之,调用QWidget::setLayout()函数安装布局,则可以不为该布局指定父部件。
- 不需要为添加到布局中的部件指定父部件,布局中的部件会自动成为安装布局的部件的子部件(使用 QWidget::setParent())。注意:子部件的父部件不是布局,而是安装布局的部件。
3)部件拉伸因子(Stretch):拉伸因子描述了各个部件在进行拉伸时,多个部件之间应以怎样的比例进行拉伸。使用设置拉伸因子的函数(如setStretch)时,应注意在添加部件之后使用,否则将不起作用。
4)内容边距(ContentsMargins)、间距(spacing)和 QSpacerItem 类解释:
- 内容边距(ContentsMargins):就是页边距,指的是布局中的各子部件(内容)与周围四个边的距离。常用函数如void QLayout::setContentsMargins(int left, int top, int right, int bottom);
- 间距(spacing):指的是各部件之间的距离。
- QSpacerItem 类:使用该类可以创建自定义的间距,使用该类创建的间距相当于是一个空白部件,它是布局中的一个项目,会在布局中占据一个位置,布局会为其分配一个索引号,也就是说由QSpacerItem 类创建的对象是可以由布局管理器进行管理的。通常不需要使用这个类,因为在各布局管理器中有相应的函数代替了该类的功能。
注意:spacing 属性设置的间距不是一个 QSpacerItem,它不是布局中的一个项目,spcing 属性只是设置了两部件之间的距离,在这之间未插入任何东西,因此布局不会为其分配索引号。
QBoxLayout类
QBoxLayout 盒式布局管理器,可以创建水平或垂直方向的布局管理器,通常使用的是该类的两个子类 QHBoxLayout 和 QVBoxLayout。
QBoxLayout 布局中的常用成员函数如下:
- QBoxLayout(Direction dir, QWidget* parent = Q_NULLPTR);
构造一个方向为 dir 的盒式布局 - void addLayout(QLayout* layout, int stretch = 0);
void insertLayout(int index, QLayout* layout, int stretch = 0);
把布局layout添加到末尾或在指定索引index处插入布局,并设置其拉伸因子为stretch,若 index 为负,则添加到末尾。 - void addWidget(QWidget* widget, int stretch = 0, Qt::Alignment m = Qt::Alignmnet());
void insertWidget(int index, QWidget* widget, int stretch = 0, Qt::Alignment m = Qt::Alignmnet());
把部件 widg