从零开始学Qt(18):Qt布局管理详解(2)

Qt 共提供了 5 种布局管理器,每种布局管理器对应一个类,分别是 QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)、QFormLayout(表单布局)和 QStackedLayout(分组布局)。本文介绍如何通过代码的方式创建布局管理。

一、QHBoxLayout水平布局

下列代码创建一个水平布局QHBoxLayout,管理5个QPushButton控件:

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);
window->setLayout(layout);
window->show();

界面效果如下图所示:

在上面代码中,只需将QHBoxLayout替换为QVBoxLayout,即可实现垂直布局效果,因此不再复述。

二、QGridLayout网格布局

网格布局QGridLayout有一点不同,因为需要指定子控件在布局中的行列位置:

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");
QGridLayout *layout = new QGridLayout;
layout->addWidget(button1, 0, 0);
layout->addWidget(button2, 0, 1);
layout->addWidget(button3, 1, 0, 1, 2);
layout->addWidget(button4, 2, 0);
layout->addWidget(button5, 2, 1);
window->setLayout(layout);
window->show();

界面效果如下图所示:

第三个QPushButton占用了两列,这是通过在QGridLayout::addWidget()函数中将第5个参数设置为2实现的。

三、QFormLayout表单布局

表单布局QFormLayout,在一行上放置两个控件,一般第一个是QLabel,第二个是QLineEdit,这时QLineEdit将被自动设置为QLabl的伙伴(buddy)。示例代码如下:

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QLineEdit *lineEdit1 = new QLineEdit();
QPushButton *button2 = new QPushButton("Two");
QLineEdit *lineEdit2 = new QLineEdit();
QPushButton *button3 = new QPushButton("Three");
QLineEdit *lineEdit3 = new QLineEdit();
QFormLayout *layout = new QFormLayout;
layout->addRow(button1, lineEdit1);
layout->addRow(button2, lineEdit2);
layout->addRow(button3, lineEdit3);
window->setLayout(layout);
window->show();

界面效果如下图所示:

四、QStackedLayout分组布局

QStackedLayout布局管理器可以容纳多个控件或者窗口,但每次只显示其中的一个。简单的示例代码如下:

QWidget widget;
//向主窗口中添加一个水平布局控件
QHBoxLayout *layout=new QHBoxLayout;

//创建一个列表
QListWidget listWidget(&widget);
listWidget.addItem("QPushButton");
listWidget.addItem("QLabel");
listWidget.addItem("QLineEdit");

//新建3个窗口,分别放置文本框、按钮和单行输入框
QWidget widget1;
QPushButton but1("这是一个按钮",&widget1);
QWidget widget2;
QLabel lab1("这是一个文本框",&widget2);
QWidget widget3;
QLineEdit edit("这是一个单行输入框",&widget3);

//创建一个分组布局,将3个窗口添加到分组控件中
QStackedLayout *stackedLayout = new QStackedLayout;
stackedLayout->addWidget(&widget1);
stackedLayout->addWidget(&widget2);
stackedLayout->addWidget(&widget3);

//layout第一列添加QListWidget控件,第二列添加分组布局控件
layout->addWidget(&listWidget,1);
layout->addLayout(stackedLayout,4);
//将layout水平布局控件添加到widget窗口中
widget.setLayout(layout);
widget.show();
//连接信号和槽,实现当点击列表中的某一项,切换分组布局管理器显示的控件
QObject::connect(&listWidget,&QListWidget::currentRowChanged,stackedLayout,&QStackedLayout::setCurrentIndex);

界面效果如下图所示:

QStackedLayout自身无法切换当前显示的控件或窗口,实际应用时通常和QListWidget 或者QComboBox搭配使用。

展开阅读全文

页面更新:2024-03-06

标签:布局   网格   管理器   表单   控件   详解   界面   窗口   水平   效果   代码

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top