Layout
1.QGridLayout
Qt 框架中的一个布局管理器,用于在一个二维网格中排列部件。QGridLayout
允许您将部件按照行和列的方式进行布局,以便在用户界面中创建复杂的布局结构。
.h
QGridLayout *grid;
QPushButton *butt1;
QPushButton *butt2;
QPushButton *butt3;
QPushButton *butt4;
.cpp
butt1 = new QPushButton(this);
butt1->setText("第一区:顶部菜单栏选项");
//设置固定的高度
butt1->setFixedHeight(50);
//大小属性
butt1->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
butt2 = new QPushButton(this);
butt2->setText("第二区域:侧边栏选项:");
butt2->setFixedWidth(50); //设置固定大小宽度
//控件在水平 或 垂直上面控件的参数 控件会尽可能地扩展以填充其可用空间
//表格根据窗口的变化而变化
butt2->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
butt3 = new QPushButton(this);
butt3->setText("第三区域:底部选项:");
butt3->setFixedHeight(50);
butt3->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
butt4 = new QPushButton(this);
butt4->setText("第四区:子窗体选项:");
//butt4->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
grid = new QGridLayout(this);
//通过此函数设置左侧 顶部 右侧 底部边距 主要方便布局周围进行使用
grid->setContentsMargins(0,0,0,0);
//设置边距 表示控件与窗体的左右边距
grid->setMargin(30);
//设置个控件之间的上下间距
grid->setSpacing(40);
//设置间隔
//grid->setSpacing(0);
//显示的位置 将上面的控件放入网格布局中
grid->addWidget(butt1,0,1);
/*
参数1: butt2 是要添加到网格布局的控件。
参数2: 0 是控件在网格布局中的行索引。
参数3: 0 是控件在网格布局中的列索引。
参数4: 3 是控件所占据的行数。
参数5: 1 是控件所占据的列数。
参数6: 指定对其方式
*/
grid->addWidget(butt2,0,0,3,1);
grid->addWidget(butt3,2,1);
grid->addWidget(butt4,1,1);
运行效果:
2.QFormLayout
Qt 框架中的一个布局管理器,用于创建表单式的布局。它主要用于创建标签-字段对的布局,其中每个字段可以是输入框、按钮等用户界面部件。QFormLayout
的主要用途是在用户界面中创建表单、设置对话框等,以清晰地显示标签和相关字段。
.h
QFormLayout *qLayout;
QLineEdit *qEdit1;
QLineEdit *qEdit2;
QLineEdit *qEdit3;
QLineEdit *qEdit4;
.cpp
setFixedSize(500,400); //窗口大小
// 创建 表单布局指针
qLayout = new QFormLayout(this);
qEdit1 = new QLineEdit(); //学号
qEdit2 = new QLineEdit(); //姓名
qEdit3 = new QLineEdit(); //学校
qLayout->addRow("学号",qEdit1);
qLayout->addRow("姓名",qEdit2);
qLayout->addRow("学校",qEdit3);
qLayout->setSpacing(8); //控件之间的上下边距
/*
* 设置标签的显示格式
QFormLayout::WrapAllRows 以行位单位的操作:以每一个组件为一行 (将标签显示在单行编辑框的上面)
QFormLayout::WrapLongRows 以行位单位的操作:以每组为一行(将标签的所有为一行显示), 一般用于小屏幕的嵌入式设备
QFormLayout::DontWrapRows
*/
//qLayout->setRowWrapPolicy(QFormLayout::WrapAllRows);
//当标签和单选编辑框,将标签显示在同一行
qLayout->setRowWrapPolicy(QFormLayout::WrapLongRows);
qLayout->setLabelAlignment(Qt::AlignLeft); // 设置标签对齐方式
setWindowTitle("表单测试布局案例");
运行效果:
3.QBoxLayout 派生出(QHBoxLayout QVBoxLayout)这两个子类
Qt 框架中的一个布局管理器,用于在单一方向上排列部件(widget)。QBoxLayout
支持水平和垂直两种方向的排列,分别称为水平布局和垂直布局。
在 QBoxLayout
中,部件会按照指定的方向(水平或垂直)进行线性排列。您可以使用 QBoxLayout
来创建水平的工具栏、垂直的按钮组、状态栏等。
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
QHBoxLayout *layout = new QHBoxLayout; // 水平布局
QPushButton *button1 = new QPushButton("Button 1");
QPushButton *button2 = new QPushButton("Button 2");
layout->addWidget(button1);
layout->addWidget(button2);
window.setLayout(layout);
window.show();
return app.exec();
}
4.QStackedLayout
Qt框架中的一个布局管理器,用于管理垂直或水平堆叠的窗口部件(QWidget)。它允许在同一区域显示多个窗口部件,但只显示其中的一个,通过切换当前显示的部件来实现。
QStackedLayout提供以下主要功能:
-
添加和移除窗口部件:
addWidget(QWidget *widget)
: 向堆叠布局中添加窗口部件。insertWidget(int index, QWidget *widget)
: 在指定位置插入窗口部件。removeWidget(QWidget *widget)
: 从堆叠布局中移除指定的窗口部件。
-
切换显示的窗口部件:
setCurrentIndex(int index)
: 设置当前显示的窗口部件索引。currentWidget() const
: 获取当前显示的窗口部件。
-
获取和设置部件的索引:
indexOf(QWidget *widget) const
: 获取指定窗口部件的索引。widget(int index) const
: 获取指定索引处的窗口部件。
#include <QApplication>
#include <QMainWindow>
#include <QStackedLayout>
#include <QPushButton>
#include <QTextEdit>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建主窗口
QMainWindow mainWindow;
// 创建QStackedLayout对象
QStackedLayout *stackedLayout = new QStackedLayout;
// 创建窗口部件
QPushButton *button1 = new QPushButton("Button 1");
QPushButton *button2 = new QPushButton("Button 2");
QTextEdit *textEdit = new QTextEdit;
// 将窗口部件添加到布局中
stackedLayout->addWidget(button1);
stackedLayout->addWidget(button2);
stackedLayout->addWidget(textEdit);
// 设置默认显示的窗口部件
stackedLayout->setCurrentWidget(button1);
// 设置QStackedLayout为主窗口的中央部件
QWidget *centralWidget = new QWidget(&mainWindow);
centralWidget->setLayout(stackedLayout);
mainWindow.setCentralWidget(centralWidget);
mainWindow.show();
return app.exec();
}
5.QSplitter (Qt框架中的一个控件(widget),用于创建可调整大小的分隔窗口布局)
使用QSplitter时,通常会将其他的控件添加到QSplitter中,以形成分隔窗口的效果。这些子控件可以是任意的QWidget派生类,例如QPushButton、QTreeView、QDoctWidget等。
.h
QSplitter *spMainWindow;
QTextEdit *txteditmain;
.cpp
//1.拆分窗口 (分割窗口\分裂窗口布局)
spMainWindow = new QSplitter(Qt::Horizontal,0);
txteditmain = new QTextEdit("左边主窗口",spMainWindow);
//2.右边部分 拆分右边窗口
QSplitter *spRight = new QSplitter(Qt::Vertical,spMainWindow);
QTextEdit *txteditup = new QTextEdit("右边上窗口",spRight);
QTextEdit *txteditdown = new QTextEdit("右边下窗口",spRight);
QSplitter *sp = new QSplitter(Qt::Horizontal,spMainWindow);
QTextEdit *txt = new QTextEdit("新拆分",sp);
spMainWindow->setWindowTitle("拆分窗口");
spMainWindow->show();
运行效果: