Qt的布局是通过布局管理器来实现的,布局管理器负责在父类窗口部件区域构建子窗口部件,使得放置在窗体中的每个窗口部件都有一个适合的大小和位置,并且能够随着应用程序本身的变化而变化从而达到不改变整体的布局的结构的效果。
Qt常用的三种布局类如下:
(1)QHBoxLayout:水平布局
(2)QVBoxLayout:垂直布局
(3)QGridLayout:网格布局
这三种方法可以嵌套使用。
关系如下:
常用的方法有两种:
(1)addWidget():用于在布局中插入控件
(2)addLayout():用于在布局中插入子布局
水平布局管理器可以把它所管理的部件以水平的顺序依次排开,如下图所示:
垂直管理器类似与水平管理器,把它所管理的部件以垂直的顺序依次排开,如下图所示:
网格布局管理器可以以网格的形式,将它所管理的部件以一定的矩阵形式排列,如下图所示
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QPushButton *btn1;
QPushButton *btn2;
QPushButton *btn3;
QPushButton *btn4;
QPushButton *btn5;
QPushButton *btn6;
QPushButton *btn7;
QPushButton *btn8;
};
#endif // MAINWINDOW_H
//**************************************************************************************
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QWidget *widget=new QWidget;//构建一个QWidget布局将设置的布局添加进这个QWidget
this->setCentralWidget(widget);
//初始化按钮
btn1=new QPushButton("1");
btn2=new QPushButton("2");
btn3=new QPushButton("3");
btn4=new QPushButton("4");
btn5=new QPushButton("5");
btn6=new QPushButton("6");
btn7=new QPushButton("7");
btn8=new QPushButton("8");
QGridLayout *mainLayout=new QGridLayout;//网格布局
QHBoxLayout *leftLayout=new QHBoxLayout;//水平布局
QVBoxLayout *rightLayout=new QVBoxLayout;//垂直布局
QGridLayout *downLayout=new QGridLayout;
//按钮1和按钮2以水平布局方式从左至右排列
leftLayout->addWidget(btn1);
leftLayout->addWidget(btn2);
//按钮3和按钮4以垂直布局方式从上至下排列
rightLayout->addWidget(btn3);
rightLayout->addWidget(btn4);
//按钮5、按钮6、按钮7和按钮8以网格布局方式按坐标排列
downLayout->addWidget(btn5,0,0);
downLayout->addWidget(btn6,0,1);
downLayout->addWidget(btn7,1,0);
downLayout->addWidget(btn8,1,1);
//将以上三个子布局以网格布局方式按坐标排列
mainLayout->addLayout(leftLayout,0,0);
mainLayout->addLayout(rightLayout,0,1);
mainLayout->addLayout(downLayout,1,1);
widget->setLayout(mainLayout);//将布局显示出来
}
MainWindow::~MainWindow()
{
}
//***************************************************************************************
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
//**************************************************************************************
编译运行,界面如下图所示:
该界面时1、2按钮为一个子布局(水平类),3,4按钮为一个子布局(垂直类),5、6、7、8为一个子布局(网格类),然后将这三个子布局放入整体布局中。