欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QT笔记——QLayout

程序员文章站 2022-05-22 19:52:45
...

QT笔记——QLayout
Qt提供了三种用于布局管理的类:
QHBoxLayout(水平布局,从左往右)
QVBoxLayout(垂直布局,从上到下)
QGridLayout(网格布局)
这些类都从QLayout继承而来,它们都来源于QObject(而不是QWidget))。
头文件:

#include <QLayout>//布局

常用函数:

layout->setRowStretch(int row, int stretch);//设置行比例系数  参数:第几行 比例系数
layout->setColumnStretch(int column, int stretch);//设置列比例系数  参数:第几列 比例系数
layout->setSpacing(10);//设置间距
layout->addWidget(pushbutton, 0, 0, 2, 1);//坐标(0,0)的组件占用两行一列 
layout->addLayout(vboxlayout,1, 1);//将vboxlayout布局放在layout布局的(1,1)位置上
layout->setDirection(QBoxLayout::RightToLeft)//设置布局方向  从右向左
hboxlayout->addStretch(50); //控制伸缩 即:加一个弹簧 参数:弹簧大小
pushbutton.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);//设置组件大小可扩展

1.水平布局
头文件:

#include <QHBoxLayout>//水平布局

(1)首先我们先定义一个水平布局

QHBoxLayout *hboxlayout=new QHBoxLayout;

(2)定义需要放在布局里面的控件

 //水平layout布局
QPushButton *button1=new QPushButton("我是1号");
QPushButton *button2=new QPushButton("我是2号");
QPushButton *button3=new QPushButton("我是3号");
QPushButton *button4=new QPushButton("我是4号");

(3)将控件放入到布局中

hboxlayout->addStretch(); //控制伸缩,占位往后靠  即:在前面加一个弹簧
hboxlayout->addWidget(button1);
hboxlayout->addWidget(button2);
hboxlayout->addWidget(button3);
hboxlayout->addWidget(button4);
hboxlayout->addStretch(); //控制伸缩,占位往前靠  即:在后面加一个弹簧

(4)设置当前布局 显示出来

setLayout(hboxlayout);

(5)显示效果如下:
QT笔记——QLayout
2.垂直布局

#include <QVBoxLayout>//垂直布局

(1)首先我们先定义一个垂直布局

QVBoxLayout *vboxlayout=new QVBoxLayout;

(2)定义需要放在布局里面的控件

 //水平layout布局
QPushButton *button_1=new QPushButton("1");
QPushButton *button_2=new QPushButton("2");
QPushButton *button_3=new QPushButton("3");
QPushButton *button_4=new QPushButton("4");

(3)将控件放入到布局中

vboxlayout->addStretch();//控制伸缩,占位往后靠  即:在前面加一个弹簧
vboxlayout->addWidget(button_1);
vboxlayout->addWidget(button_2);
vboxlayout->addWidget(button_3);
vboxlayout->addWidget(button_4);
vboxlayout->addStretch();//控制伸缩,占位往前靠  即:在后面加一个弹簧

(4)设置当前布局 显示出来

setLayout(vboxlayout);

(5)显示效果如下:
QT笔记——QLayout
3.网格布局
QT笔记——QLayout

#include <QGridLayout>//网格布局

(1)首先我们先定义一个网格布局

QGridLayout *gridlayout=new QGridLayout;

(2)定义需要放在布局里面的控件

 //水平layout布局
QPushButton *btn1=new QPushButton("6");
QPushButton *btn2=new QPushButton("7");
QPushButton *btn3=new QPushButton("8");
QPushButton *btn4=new QPushButton("9");

(3)将控件放入到布局中

//addWidget()参数:控件 x y(位于网格布局中的位置)
gridlayout->addWidget(btn1,0,0);
gridlayout->addWidget(btn2,0,1);
gridlayout->addWidget(btn3,1,0);
gridlayout->addWidget(btn4,1,1);

(4)设置当前布局 显示出来

setLayout(gridlayout);

(5)显示效果如下:
QT笔记——QLayout
4.嵌套布局的例子
嵌套布局只需要设置最大的布局进行setLayout()函数,否则显示第一个setLayout()布局。

//垂直布局
QVBoxLayout *vboxlayout1=new QVBoxLayout;
QPushButton *btn6=new QPushButton("next");
QPushButton *btn7=new QPushButton("prev");
QPushButton *btn8=new QPushButton("help");
vboxlayout1->addWidget(btn6,0,0);
vboxlayout1->addWidget(btn7,1,0);
vboxlayout1->addWidget(btn8,2,0);

//水平
QHBoxLayout *hboxlayout1=new QHBoxLayout;
QListWidget *listwidget=new QListWidget;
//listwidget里面的内容
listwidget->addItem("aaa");
listwidget->addItem("bbb");
//将listwidget放进该布局里
hboxlayout1->addWidget(listwidget);
//将该布局放在另外的大布局里
hboxlayout1->addLayout(vboxlayout1);


//垂直
QVBoxLayout *vboxlayout2=new QVBoxLayout;
QLabel *label=new QLabel("new");
vboxlayout2->addWidget(label);
vboxlayout2->addLayout(hboxlayout1);
//设置对话框大小固定,不允许改变
vboxlayout2->setSizeConstraint(QLayout::SetFixedSize);
//展示最大的布局
setLayout(vboxlayout2);

效果如图所示:
QT笔记——QLayout
参考博客:https://blog.csdn.net/tqs_1220/article/details/81842878
https://www.cnblogs.com/Manual-Linux/p/9314402.html
https://blog.csdn.net/u013165921/article/details/79391234
https://blog.csdn.net/weixin_42837024/article/details/82114258

相关标签: QT学习笔记 qt