学习更多嵌入式Linux、Qt以及嵌入式单片机知识关注公众号“爱玩嵌入式”:
“布局管理是在界面编写时一个非常重要的步骤,本文介绍了几种布局管理的基本知识”
目录
一、布局的介绍
二、Qt布局管理
一、布局的介绍
在各式各样的界面编写系统中,布局永远是一个关键步骤。布局是指手动指定控件在界面中的位置。布局分为绝对布局和自动布局,绝对布局是指控件处在界面中的绝对位置,不随界面的化而变化;自动布局则打破这一规则,控件可以根据界面的大小自动调整。
从绝对布局到现在的自动布局,使界面开发的效率越来越高。如今的ide可视化程度已经非常高,使得布局变得非常简单易用。
二、Qt布局管理
作为现在流行的跨平台界面编写库的Qt同样也有齐全的布局管理系统。Qt的布局管理有以下优点:
1、父窗口改变,子窗口相应调整
2、窗口改变,控件自动调整大小和位置,不用人工计算
Qt提供了QLayout类及其子类来完成布局系统的构建,其结构如下图:
由图可见QLayout 是布局系统中的抽象基类, 继承自 QObject 和 QLayoutItem, 其中四个子类分别为
1、QBoxLayout(箱式布局)
2、QFormLayout(窗体布局)
3、QGridLayout(网格布局)
4、QStackedLayout(栈布局)
而箱式布局又进一步划分为水平布局和垂直布局。接下来分别对这四个子类进行介绍。
1、箱式布局(QBoxLayout)
箱式布局分为水平布局和垂直布局。箱式布局的作用就是使你的控件水平或者垂直的摆成一列列或者一行行,在设计师界面,我们只需将最上方的控件拖入界面中即可,然后按照实际情况调整大小。在使用库中的控件编写时,我们需要包含头文件,比如垂直布局,我们需要包含头文件:
#include <QVBoxLayout>
由于我们还想要包含lineedit来更好的展示垂直布局,所以还需要包含控件:
#include <QLineEdit>
然后编写主体代码,代码思想就是定义两个lineedit的控件,然后丢进垂直布局即可
//定义两个控件的新对象
QLineEdit *lbl1 = new QLineEdit;
lbl1->setText(tr("我是第一"));
QLineEdit *lbl2 = new QLineEdit;
lbl2->setText(tr("我时第二"));
//创建一个垂直布局,将控件放入
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addWidget(lbl1);
vLayout->addWidget(lbl2);
//设置界面布局为垂直布局
ui->centralwidget->setLayout(vLayout);
然后我们运行可以看到
此时的控件已经按垂直布局开来。
2、窗体布局(QFormLayout)
窗体布局实际上是一个很不形象的翻译,其实我们可以简化理解方式就是列表式的布局方式,如下图:
比如我们想做一个类似于这样的软件用于统计班里情况,这样的既不能用单一的水平箱式布局,也不能用单一的垂直箱式布局,因为在这个界面中两种布局方式都有,那这时候窗体布局就要起作用了。我们在设计师界面拖入窗体布局,然后双击就出现了以下界面:
我们只需要在标签文字处写入我们想要的名字点击ok就可以了,是不是很简单。
3、网格布局(QGridLayout)
网格布局是在我们想布局的界面是多行多列的情况下使用的,比如说我们想要做一个计算器,那么我们就可以使用网格布局:
这种布局方式可以根据你拖入的控件数目和你拖入的位置来进行行列划分。
4、栈布局(QStackedLayout)
有些界面会有加载成功、加载失败以及正在加载几种状态,这就使用到了栈布局,可以结合Stacked Widget一起使用,栈布局提供多个页面的独立布局,可以清晰的对各个界面不同状态下进行布局管理。