1.基本布局管理器QBoxLayout
QLayout类是布局管理器的基类,是一个抽象基类,继承自QObject 和QLayou-tItem类,QLayoutItem类提供了一个供QLayout操作的抽象项目。QLayout 和QLayoutItem都是在设计自已的布局管理器时才使用的,一般只需要使用QLayout的几个子类即可,它们分别是QBoxLayout(基本布局管理器)、QGridLayout(栅格布局管理器).QFormLayout(窗体布局管理器)和QStackedLayout(栈布局管理器)。这里的QStackedLayout与第3章讲述的栈部件QStackedWidget用法相同,不再赘述。
创建一个基于QWidget的项目,任意添加两个控件,然后点击主界面或者界面2的MyWidget,按ctrl+l或者按1的
打破已有的布局,然后使用代码来实现水平布局。在界面上右击,布局-打破布局。
在.cpp文件中添加头文件#include<QHBoxLayout>,并在MyWidget类的构造函数中,添加如下代码:
ui->setupUi(this);
QVBoxLayout *layout = new QVBoxLayout;//新建水平布局管理器
layout->addWidget(ui->fontComboBox);//向布局管理器中添加部件
layout->addWidget(ui->textEdit);
//设置部件之间的间隔
layout->setSpacing(10);
//设置布局管理器到边界的距离,4个参数左上右下
layout->setContentsMargins(50,50,50,50);
this->setLayout(layout);//将这个布局设置为MyWidget类的布局
这里使用了addWidget()向布局管理器的末尾添加部件,还有一个insertWidget()函数可以实现向指定位置添加部件,它比前者更灵活。
2.栅格布局管理器QGridLayout
栅格布局管理器QGridLayout类使部件在网格中进行布局,它将所有的空间分隔成一些行和列,行和列的交叉处形成了单元格,然后将部件放入一个确定的单元格中。先往界面上拖放一个PushButton,然后在mywidget.cpp中添加头文件#include< QGridLayout> ,再注释掉前面添加的关于水平布局管理器的代码,添加的如下
QGridLayout*layout = new QGridLayout;
this->setLayout(layout);
layout->addWidget(ui->fontComboBox,0,0,1,2);//从0行0列开始,占据1行2列
layout->addWidget(ui->pushButton,0,2,1,1);
layout->addWidget(ui->textEdit,1,0,1,3);
这里需要说明,当部件加入到一个布局管理器中,然后将这个布局管理器再放到一个窗口部件上时,这个布局管理器以及它包含的所有部件都会自动重新定义自己的父对象(parent)为这个窗口部件,所以在创建布局管理器和其中的部件时并不用指定父部件。此外,也可以直接在设计模式时使用前面讲过的方法来使用栅格布局管理器。
3.窗体布局管理器QFormLayout
窗体布局管理器QFormLayout类用来管理表单的输人部件以及与它们相关的标.签。窗体布局管理器将它的子部件分为两列,左边是- -些标签,右边是一些输人部件,比如行编辑器或者数字选择框等。其实,如果只是起到这样的布局作用,那么用QGridLayout就完全可以做到了,之所以添加QFormLayout类,是因为它有独特的功能。下面看一个例子。先将前面在MyWidget类的构造函数中自己添加的代码全部注释掉,然后进入设计模式,这里使用另外一种方法来使用布局管理器。从部件栏中找到Form Layout,将其拖人到界面上,然后双击或者在它上面右击并在弹出级联菜单中选择“添加窗体布局行”。在弹出的“添加表单布局行”对话框中填人标签文字“姓名(&.N):",这样下面便自动填写了“标签名称”、“字段类型”和“字段名称”等,并且设置了伙伴关系。这里使用了QLineEdit 行编辑器,当然也可以选择其他部件。填写的标签文字中的“(&N)"必须是英语半角的括号,表明它的快捷键是Alt十N。设置伙伴关系表示按下Alt+N 时,光标自动跳转到标签后面对应的行编辑器中。单击”确定”键,则会在布局管理器中添加一个标签和一一个行编辑器。按照这种方法,再添加3行:性别(&S),使用QCo-moBox;年龄(&A),使用QSpinBox;邮箱( &M),使用QLineEdit。完成后运行程序,可以按下预设值对应的快捷键Alt+N,这样光标就可以定位到“姓名”标签后的行编辑器中。
在代码中可以使用addRow()函数。
4.综合使用布局管理器
addlayout
来源:CSDN
作者:青青子衿0
链接:https://blog.csdn.net/yonggandess/article/details/103608617