本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、Item Virws (Model-Based) (listView、treeView、tableView、columnView、undoView) 、DisPlay Widgets(listWidget、treeWidget、tableWidget)、Containers(groupBox、scrollArea、toolBox、tabWidget、stackedWidget、frame、widget、mdiArea、dockWidget、axWidget)、Input Widgets(comboBox、fontComboBox、lineEdit、textEdit、plainTextEdit、spinBox、doubleSpinBox、timeEdit、dateEdit、dateTimeEdit、dial、horizontalScrollBar、verticalScrollBar、horizontalSlider、verticalSlider、keySequenceEdit)、item Widgets(Item-Based) (label、textBrowser、graphicsView、calendarWidget、lcdNumber、progressBar、line、openGLWidget、quickWidget) 界面的自适应界面的开发,控件接口的调用、QSS样式的举例,较为全面且详细的介绍了所有的控件。
        本文详细的介绍了QVBoxLayout控件的各种操作,例如 头文件、创建控件 、创建Layout、添加控件、添加控件伸缩因子、添加间隔和边距、插入控件、移除控件、清空布局、获取控件、设置布局到窗口、.h源代码、cpp源代码、继承关系、系列文章等等操作
         本系列QT全面详解文章目前共有五十七篇,本系列文章较为详细的讲述了QT控件的操作和使用。

选择付费专栏
1.内容全面:常用接口的所有操作 详细举例
2.内容详细:QSS、信号槽 详细举例
3.快速开发:日常开发中所有控件 逐个精通
4.控件全面:QT中所有控件包含其中 全面熟悉
5.内容保障:57种控件全部涵盖其中 内容全面
6.内容质量:QT控件使用详解专栏 质量分>90分, 阅读量超30万+
7.控件精通:全面学习速成 界面大师
8.高效学习:不到一个月精通全部控件
版权声明:本文禁止转载、复制二次发布,仅供付费读者研究
有相关问题请联系 Dream.2017@qq.com 官方网站 www.dreambegins.vip
QT QVBoxLayout控件 全面详解目录
1 头文件
2 创建控件
3 创建Layout
4 添加控件
5 添加控件伸缩因子
6 添加间隔和边距
7 插入控件
8 移除控件
9 清空布局
10 获取控件
11 设置布局到窗口
12 .h源代码
13 .cpp源代码
14 继承关系
15 系列文章
QVBoxLayout 是 Qt 中的一个布局管理器,用于将控件垂直排列。它是 QLayout 的子类,专门用于处理控件的垂直布局。使用 QVBoxLayout 可以方便地管理窗口或对话框中的控件,使得界面更加整洁和易于维护。
垂直排列:QVBoxLayout 会将添加到布局中的控件从上到下垂直排列。
自动调整大小:布局会根据窗口的大小自动调整控件的大小和位置,确保控件在窗口中适当显示。
间隔和边距:可以设置控件之间的间隔(spacing)和布局的边距(margins),以控制控件的外观和布局。
伸缩因子:可以为每个控件设置伸缩因子,控制它们在布局中占用的空间比例。伸缩因子越大,控件在可用空间中占用的比例越大。
支持嵌套布局:可以在 QVBoxLayout 中嵌套其他布局(如 QHBoxLayout),以实现更复杂的布局结构。

1 头文件
#include <QVBoxLayout> 
2 创建控件
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QDebug>
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    // 创建主窗口
    QWidget window;
    window.setWindowTitle("QVBoxLayout Example");
    window.resize(300, 200);
    // 创建 QVBoxLayout
    QVBoxLayout *layout = new QVBoxLayout(&window);
    // 创建控件
    QLabel *label = new QLabel("请输入内容:", &window);
    QLineEdit *lineEdit = new QLineEdit(&window);
    QPushButton *button = new QPushButton("提交", &window);
    // 连接按钮点击信号
    QObject::connect(button, &QPushButton::clicked, [&]() {
        qDebug() << "输入内容:" << lineEdit->text(); // 输出输入的内容
    });
    // 将控件添加到布局中
    layout->addWidget(label);
    layout->addWidget(lineEdit);
    layout->addWidget(button);
    // 设置布局到窗口
    window.setLayout(layout);
    // 显示窗口
    window.show();
    return app.exec();
} 
 
3 创建Layout
QVBoxLayout *layout = new QVBoxLayout(this); 
4 添加控件
	QPushButton *button1 = new QPushButton("按钮 1");
	QPushButton *button2 = new QPushButton("按钮 2");
	layout->addWidget(button1);
	layout->addWidget(button2); 
5 添加控件伸缩因子
	layout->addWidget(button1, 1); // 伸缩因子为 1
	layout->addWidget(button2, 2); // 伸缩因子为 2,button2 将占用比 button1 更多的空间 
 
6 添加间隔和边距
	layout->setSpacing(10); // 设置控件之间的间隔为 10 像素
	layout->setContentsMargins(15, 15, 15, 15); // 设置布局的边距 
7 插入控件
layout->insertWidget(1, new QPushButton("插入按钮")); // 在索引 1 处插入新按钮 
 
8 移除控件
layout->removeWidget(button1); // 从布局中移除 button1 
 
9 清空布局
如果你想清空布局中的所有控件,可以使用 QLayout::deleteLater() 方法。
	//QLayoutItem *item;
	//while ((item = layout->takeAt(0)) != nullptr) {
	//	delete item->widget(); // 删除控件
	//	delete item; // 删除布局项
	//} 
10 获取控件
你可以使用 itemAt() 方法获取布局中的控件。
QWidget *widget = layout->itemAt(0)->widget(); // 获取索引 0 处的控件 
11 设置布局到窗口
将布局设置为窗口的布局。
	QWidget *window = new QWidget;
	window->setLayout(layout);
	window->show(); 
 
12 .h源代码
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_QVerticalLayout.h"
#include <QVBoxLayout>
#include <QPushButton>
#include <QDebug>
#pragma execution_character_set("utf-8")
class QVerticalLayout : public QMainWindow
{
    Q_OBJECT
public:
    QVerticalLayout(QWidget *parent = nullptr);
    ~QVerticalLayout();
private:
    Ui::QVerticalLayoutClass ui;
	QVBoxLayout *layout;
};
 
13 .cpp源代码
#include "QVerticalLayout.h"
QVerticalLayout::QVerticalLayout(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
//#include <QApplication>
//#include <QPushButton>
//#include <QVBoxLayout>
//#include <QWidget>
//#include <QLabel>
//#include <QLineEdit>
//#include <QDebug>
//
//	int main(int argc, char *argv[]) {
//		QApplication app(argc, argv);
//
//		// 创建主窗口
//		QWidget window;
//		window.setWindowTitle("QVBoxLayout Example");
//		window.resize(300, 200);
//
//		// 创建 QVBoxLayout
//		QVBoxLayout *layout = new QVBoxLayout(&window);
//
//		// 创建控件
//		QLabel *label = new QLabel("请输入内容:", &window);
//		QLineEdit *lineEdit = new QLineEdit(&window);
//		QPushButton *button = new QPushButton("提交", &window);
//
//		// 连接按钮点击信号
//		QObject::connect(button, &QPushButton::clicked, [&]() {
//			qDebug() << "输入内容:" << lineEdit->text(); // 输出输入的内容
//		});
//
//		// 将控件添加到布局中
//		layout->addWidget(label);
//		layout->addWidget(lineEdit);
//		layout->addWidget(button);
//
//		// 设置布局到窗口
//		window.setLayout(layout);
//
//		// 显示窗口
//		window.show();
//
//		return app.exec();
//	}
	layout = new QVBoxLayout();
	QPushButton *button1 = new QPushButton("按钮 1");
	QPushButton *button2 = new QPushButton("按钮 2");
	layout->addWidget(button1);
	layout->addWidget(button2);
	layout->addWidget(button1, 1); // 伸缩因子为 1
	layout->addWidget(button2, 2); // 伸缩因子为 2,button2 将占用比 button1 更多的空间
	layout->setSpacing(10); // 设置控件之间的间隔为 10 像素
	layout->setContentsMargins(15, 15, 15, 15); // 设置布局的边距
	layout->insertWidget(1, new QPushButton("插入按钮")); // 在索引 1 处插入新按钮
	layout->removeWidget(button1); // 从布局中移除 button1
	//QLayoutItem *item;
	//while ((item = layout->takeAt(0)) != nullptr) {
	//	delete item->widget(); // 删除控件
	//	delete item; // 删除布局项
	//}
	QWidget *widget = layout->itemAt(0)->widget(); // 获取索引 0 处的控件
	QWidget *window = new QWidget;
	window->setLayout(layout);
	window->show();
}
QVerticalLayout::~QVerticalLayout()
{}
 
14 继承关系
15 相关文章
16 系列文章
ps: 其它说明
希望大家多点点赞,收藏,也希望多评论,指出不足的地方,因为是系列文章所以有不足的地方会整个系列优化,谢谢大家支持



















