QT笔记——QLayout
程序员文章站
2022-05-22 19:52:45
...
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)显示效果如下:
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)显示效果如下:
3.网格布局
#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)显示效果如下:
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);
效果如图所示:
参考博客: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