一.布局器介绍
在Qt中,布局器是用来管理和排列控件的工具,可以确保界面在不同平台和窗口大小下都能正确显示。Qt提供了多种布局器类,包括QHBoxLayout、QVBoxLayout、QGridLayout等,每种布局器都有不同的布局方式和特点。
QHBoxLayout:水平布局器,用于按照水平方向排列控件。可以通过addWidget()方法将控件添加到水平布局器中,控件会从左到右依次排列。
QVBoxLayout:垂直布局器,用于按照垂直方向排列控件。可以通过addWidget()方法将控件添加到垂直布局器中,控件会从上到下依次排列。
QGridLayout:网格布局器,用于按照行列网格排列控件。可以通过addWidget()方法将控件添加到网格布局器中,并指定控件所在的行列位置。
QFormLayout:表单布局器,用于按照标签-编辑框的形式排列控件。可以通过addRow()方法将标签和编辑框添加到表单布局器中。
QStackedLayout:堆叠布局器,用于在同一位置显示多个控件,只显示其中一个控件。可以通过addWidget()方法将控件添加到堆叠布局器中,然后通过setCurrentIndex()方法设置当前显示的控件索引。
使用布局器可以使界面设计更加灵活和易于维护,同时也能确保界面在不同平台和窗口大小下都能正确显示。在Qt中,可以通过代码或者Qt Designer来设置和管理布局器。
二.代码实现
1.QHBoxLayout(水平布局器):
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建一个QWidget对象作为布局器的父对象
QWidget *widget = new QWidget;
// 创建一个水平布局器
QHBoxLayout *layout = new QHBoxLayout(widget);
// 创建三个按钮
QPushButton *button1 = new QPushButton("Button 1");
QPushButton *button2 = new QPushButton("Button 2");
QPushButton *button3 = new QPushButton("Button 3");
// 将按钮添加到水平布局器中
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
// 设置布局器给父对象
widget->setLayout(layout);
// 显示窗口
widget->show();
return app.exec();
}
2.QVBoxLayout(垂直布局器):
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建一个QWidget对象作为布局器的父对象
QWidget *widget = new QWidget;
// 创建一个垂直布局器
QVBoxLayout *layout = new QVBoxLayout(widget);
// 创建三个按钮
QPushButton *button1 = new QPushButton("Button 1");
QPushButton *button2 = new QPushButton("Button 2");
QPushButton *button3 = new QPushButton("Button 3");
// 将按钮添加到垂直布局器中
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
// 设置布局器给父对象
widget->setLayout(layout);
// 显示窗口
widget->show();
return app.exec();
}
3.QGridLayout(网格布局器):
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建一个QWidget对象作为布局器的父对象
QWidget *widget = new QWidget;
// 创建一个网格布局器
QGridLayout *layout = new QGridLayout(widget);
// 创建三个按钮
QPushButton *button1 = new QPushButton("Button 1");
QPushButton *button2 = new QPushButton("Button 2");
QPushButton *button3 = new QPushButton("Button 3");
// 将按钮添加到网格布局器中
layout->addWidget(button1, 0, 0); // 第一行,第一列
layout->addWidget(button2, 0, 1); // 第一行,第二列
layout->addWidget(button3, 1, 0, 1, 2); // 第二行,占据两列
// 设置布局器给父对象
widget->setLayout(layout);
// 设置布局器的间距和边距
layout->setSpacing(10); // 设置控件之间的间距
layout->setContentsMargins(10, 10, 10, 10); // 设置布局器的边距
// 设置窗口标题和大小
widget->setWindowTitle("Grid Layout Example");
widget->resize(300, 200);
// 显示窗口
widget->show();
return app.exec();
}
三.addWidget()使用方法举例
样例:m_layout->addWidget(m_textEdit,0,0,1,10);
在这段代码中,
m_layout->addWidget(m_textEdit, 0, 0, 1, 10)
是向QGridLayout
布局器中添加一个控件m_textEdit
的方法调用。具体参数的含义如下:
m_textEdit
:要添加的控件指针。0
:控件的行索引,这里表示将控件放在第0行。0
:控件的列索引,这里表示将控件放在第0列。1
:控件的行跨度,这里表示控件占据1行。10
:控件的列跨度,这里表示控件占据10列。这样,控件
m_textEdit
将被添加到QGridLayout
布局器中的第0行第0列,并且占据1行10列的空间。控件的位置和大小将根据指定的行索引、列索引、行跨度和列跨度来确定。