使用QGridLayout可以进行网格布局,把界面上的元素按行和列进行布局。行数和列数可以设置,例如2行3列,5行9列等。以一个例子进行说明。
使用Qt Creator创建Widgets应用程序。其中一个步骤如下:

htmainwindow.h代码:
#ifndef HTMAINWINDOW_H
#define HTMAINWINDOW_H
#include <QMainWindow>
#include<QPushButton>
#include<QGridLayout>
#include<QLabel>
QT_BEGIN_NAMESPACE
namespace Ui { class HtMainWindow; }
QT_END_NAMESPACE
class HtMainWindow : public QMainWindow
{
Q_OBJECT
public:
HtMainWindow(QWidget *parent = nullptr);
~HtMainWindow();
private:
Ui::HtMainWindow *ui;
QPushButton Ht_button1,Ht_button2;
QGridLayout Ht_layout;
QWidget Ht_Widget;
QLabel * Ht_url=nullptr;
};
#endif // HTMAINWINDOW_H
htmainwindow.cpp代码:
#include "htmainwindow.h"
#include "./ui_htmainwindow.h"
HtMainWindow::HtMainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::HtMainWindow)
{
ui->setupUi(this);
setWindowTitle("何问起QGridLayout实例");
Ht_button1.setParent(this->centralWidget());
Ht_button1.setText("何问起");
Ht_button2.setParent(this->centralWidget());
Ht_button2.setText("布局");
Ht_Widget.setParent(this->centralWidget());
Ht_Widget.setStyleSheet("background:yellow");
Ht_url=new QLabel(&Ht_Widget);
Ht_url->setText("hovertree.com");
Ht_url->setStyleSheet("color:red;font-size:18px");
Ht_url->move(10,20);
Ht_layout.addWidget(&Ht_button1,0,0,Qt::AlignLeft);//第0行,第0列
Ht_layout.addWidget(&Ht_button2,0,1,Qt::AlignLeft);//第0行,第1列
Ht_layout.addWidget(&Ht_Widget,1,0,1,2);//第1行,第0列,占据1行2列
this->centralWidget()->setLayout(&Ht_layout);
}
HtMainWindow::~HtMainWindow()
{
delete ui;
if(Ht_url!=nullptr)
delete Ht_url;
}
运行结构如下图:

注意:
A layout can only have another layout as a parent
QGridLayout可以设置另一个QGridlayout或者其他Layout作为父元素。
一个Layout元素只能设置另一个Layout元素做为父元素。