最近在开发一个嵌入式界面,主界面使用到了栅格布局,而且项目中没有用.ui文件,而是纯代码来设置界面。
一、QGridLayout的基本使用
-
添加控件:addWidget()函数的使用
addWidget()重载一:
addWidget(控件名,行数,列数);
addWidget()重载二:
addWidget(控件名,行数,列数,控件长度占几行,控件长度占几列);
二、实际项目中的使用
此处以在栅格布局中加入四个按钮控件为例,运行窗口如下图:
首先新建一个以Qwidget为基类,且取消ui文件生成的使用的项目:
然后.h文件代码如下:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMainWindow>
#include <QGridLayout>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
QGridLayout *p_layout;
QPushButton *btn1;
QPushButton *btn2;
QPushButton *btn3;
QPushButton *btn4;
};
#endif // WIDGET_H
.cpp文件代码如下:
#include "Widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
btn1 = new QPushButton(this);
btn1->setText("一区:顶部菜单栏");
btn1->setFixedHeight(40);
btn1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
btn2 = new QPushButton(this);
btn2->setText("二区:侧边栏");
btn2->setFixedWidth(100);
btn2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
btn3 = new QPushButton(this);
btn3->setText("三区:底部");
btn3->setFixedHeight(40);
btn3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
btn4 = new QPushButton(this);
btn4->setText("四区:子窗口显示区");
btn4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
p_layout = new QGridLayout();
p_layout->setContentsMargins(0,0,0,0);
p_layout->setSpacing(0);
p_layout->addWidget(btn1,0,0);
p_layout->addWidget(btn2,0,1,3,1);
p_layout->addWidget(btn3,2,0);
p_layout->addWidget(btn4,1,0);
setLayout(p_layout);
}
Widget::~Widget()
{
}
此处代码实现了将栅格布局分为三行,两列的四个区,其中一区和三区设置固定高度为40,二区设定固定宽度为100。