目录
[一、Qt 组件核心分类及常用组件详解](#一、Qt 组件核心分类及常用组件详解)
[1. QLabel(标签控件)](#1. QLabel(标签控件))
[2. QPushButton(按钮控件)](#2. QPushButton(按钮控件))
[3. QLineEdit(单行文本输入框)](#3. QLineEdit(单行文本输入框))
[1. QVBoxLayout(垂直布局)](#1. QVBoxLayout(垂直布局))
[2. QHBoxLayout(水平布局)](#2. QHBoxLayout(水平布局))
[3. QGridLayout(网格布局)](#3. QGridLayout(网格布局))
[(三)容器控件(容纳多个控件 / 布局)](#(三)容器控件(容纳多个控件 / 布局))
[1. QGroupBox(分组框)](#1. QGroupBox(分组框))
[2. QTabWidget(标签页控件)](#2. QTabWidget(标签页控件))
[二、复选按钮(QCheckBox)的分组(视觉 / 功能)](#二、复选按钮(QCheckBox)的分组(视觉 / 功能))
[1. 视觉分组:QGroupBox(仅归类,不影响多选)](#1. 视觉分组:QGroupBox(仅归类,不影响多选))
一、Qt 组件核心分类及常用组件详解
ps:右键重构就可以自动添加头文件

(一)基础输入输出控件(最常用)
这类控件用于实现界面的基本信息展示和用户输入,是构建界面的基石。
1. QLabel(标签控件)
-
核心作用:用于显示文本(普通文字、富文本)、图片、动画,也可作为其他控件的提示标签,不支持用户输入。
-
关键属性 / 方法 :
- setText(const QString &text):设置显示的文本内容(支持 HTML 富文本,如红色文字)。
- setPixmap(const QPixmap &pixmap):设置显示的图片。
- setAlignment(Qt::Alignment align):设置内容对齐方式(如Qt::AlignCenter居中、Qt::AlignLeft左对齐)。
#include "mainwindow.h" #include <QLabel> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setWindowTitle("QLabel实例"); this->setFixedSize(600,600); //Lable QLabel *textLabel = new QLabel(this); textLabel->setText("普通文本"); textLabel->setGeometry(20,20,200,50); textLabel->setAlignment(Qt::AlignCenter); } MainWindow::~MainWindow() {}
2. QPushButton(按钮控件)
- 核心作用:触发用户交互事件(如点击按钮执行某个功能),是界面交互的核心控件。
- 关键属性 / 方法 :
- setText(const QString &text):设置按钮上显示的文字。
- setEnabled(bool enabled):设置按钮是否可用(false为灰色不可点击状态)。
- clicked():按钮被点击时发出的信号(Qt 核心的信号槽机制,用于关联点击后的执行逻辑)。
- 简单使用示例:
//QPushButton QPushButton *btn = new QPushButton("按钮",this); btn ->setGeometry(100,100,100,30); connect(btn,&QPushButton::clicked,[=](){ textLabel->setText("按钮点击"); });

3. QLineEdit(单行文本输入框)
-
核心作用:接收用户输入的单行文本(如账号、密码、搜索关键词等)。
-
关键属性 / 方法 :
- setText(const QString &text):设置输入框默认文本。
- text():获取用户输入的文本内容(返回QString类型,可通过toStdString()转为 C++ 标准字符串)。
- setPlaceholderText(const QString &text):设置占位提示文本(输入框为空时显示,输入内容后消失)。
- setEchoMode(QLineEdit::EchoMode mode):设置文本显示模式(如QLineEdit::Password密码隐藏模式,显示为圆点 / 星号)。
-
简单使用示例:
#include "mainwindow.h"
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("QLineEdit示例");
this->resize(300, 200);// 账号标签和输入框 QLabel *accountLabel = new QLabel("账号:", this); accountLabel->setGeometry(50, 50, 50, 30); QLineEdit *accountEdit = new QLineEdit(this); accountEdit->setGeometry(100, 50, 150, 30); accountEdit->setPlaceholderText("请输入账号"); // 密码标签和输入框 QLabel *pwdLabel = new QLabel("密码:", this); pwdLabel->setGeometry(50, 100, 50, 30); QLineEdit *pwdEdit = new QLineEdit(this); pwdEdit->setGeometry(100, 100, 150, 30); pwdEdit->setPlaceholderText("请输入密码"); pwdEdit->setEchoMode(QLineEdit::Password); // 密码隐藏模式 // 确认按钮 QPushButton *confirmBtn = new QPushButton("确认", this); confirmBtn->setGeometry(120, 150, 80, 30); // 点击按钮获取输入内容 connect(confirmBtn, &QPushButton::clicked, [=]() { QString account = accountEdit->text(); QString pwd = pwdEdit->text(); qDebug() << "account:" << account; // 控制台输出账号 qDebug() << "pwd:" << pwd; // 控制台输出密码 });}
MainWindow::~MainWindow() {}


(二)布局控件(管理控件位置)
手动通过 setGeometry()设置控件位置和大小,在窗口缩放时会错乱,Qt 的布局控件可自动管理控件的排列和大小适配,核心有 3 种常用布局。
1. QVBoxLayout(垂直布局)
- 核心作用 :将控件按从上到下的垂直方向依次排列。
- 关键方法 :
- addWidget(QWidget *widget):向布局中添加控件。
- addSpacing(int size):添加固定间距。
- setContentsMargins(int left, int top, int right, int bottom):设置布局与父控件的边距。
- 使用说明 :布局控件需绑定到一个父容器(如QWidget),不能直接绑定到QMainWindow(需先设置QMainWindow的中心部件)。
2. QHBoxLayout(水平布局)
- 核心作用 :将控件按从左到右的水平方向依次排列。
- 关键方法 :与QVBoxLayout一致,仅排列方向不同。
3. QGridLayout(网格布局)
-
核心作用 :将控件按行和列的网格形式排列(类似 Excel 表格),灵活度最高。
-
关键方法 :
- addWidget(QWidget *widget, int row, int col, int rowSpan, int colSpan):添加控件到指定行、列,可设置跨行 / 跨列数(默认跨行跨列数为 1)。
-
布局控件综合示例:
#include "mainwindow.h"
#include <QLineEdit>
#include <QPushButton>
#include <qboxlayout.h>
#include <qlabel.h>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("布局控件示例");
this->resize(300, 200);// 1. 创建中心部件(QMainWindow必须通过中心部件设置布局) QWidget *centralWidget = new QWidget(this); this->setCentralWidget(centralWidget); // 2. 创建控件 QLabel *accountLabel = new QLabel("账号:"); QLineEdit *accountEdit = new QLineEdit(); accountEdit->setPlaceholderText("请输入账号"); QLabel *pwdLabel = new QLabel("密码:"); QLineEdit *pwdEdit = new QLineEdit(); pwdEdit->setEchoMode(QLineEdit::Password); QPushButton *confirmBtn = new QPushButton("确认"); QPushButton *cancelBtn = new QPushButton("取消"); // 3. 创建水平布局(存放两个按钮) QHBoxLayout *btnLayout = new QHBoxLayout(); btnLayout->addStretch(); // 添加伸缩空间(按钮右对齐) btnLayout->addWidget(confirmBtn); btnLayout->addSpacing(20); // 按钮之间间距 btnLayout->addWidget(cancelBtn); btnLayout->addStretch(); // 4. 创建水平布局(存放账号标签和输入框) QHBoxLayout *accountLayout = new QHBoxLayout(); accountLayout->addWidget(accountLabel); accountLayout->addWidget(accountEdit); // 5. 创建水平布局(存放密码标签和输入框) QHBoxLayout *pwdLayout = new QHBoxLayout(); pwdLayout->addWidget(pwdLabel); pwdLayout->addWidget(pwdEdit); // 6. 创建垂直布局(存放所有子布局和控件) QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); mainLayout->addLayout(accountLayout); mainLayout->addLayout(pwdLayout); mainLayout->addSpacing(30); mainLayout->addLayout(btnLayout); mainLayout->setContentsMargins(50, 30, 50, 30); // 布局边距}
MainWindow::~MainWindow() {}

(三)容器控件(容纳多个控件 / 布局)
用于对界面进行分组管理,将相关控件归类,提升界面整洁度。
1. QGroupBox(分组框)
- 核心作用:带标题的分组容器,可将相关控件包裹在一起,视觉上形成独立分组。
- 关键方法 :
-
setTitle(const QString &title):设置分组框标题。
-
setLayout(QLayout *layout):为分组框设置内部布局。
#include "mainwindow.h"
#include <QGroupBox>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <qboxlayout.h>
#include <qlabel.h>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("QGroupBox示例");
this->resize(300, 200);QWidget *centralWidget = new QWidget(this); this->setCentralWidget(centralWidget); QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget); // 创建分组框 QGroupBox *genderGroup = new QGroupBox("性别选择", this); QVBoxLayout *genderLayout = new QVBoxLayout(genderGroup); // 创建单选按钮 QRadioButton *maleBtn = new QRadioButton("男"); QRadioButton *femaleBtn = new QRadioButton("女"); maleBtn->setChecked(true); // 默认选中"男" // 添加控件到分组框布局 genderLayout->addWidget(maleBtn); genderLayout->addWidget(femaleBtn); // 将分组框添加到主布局 mainLayout->addWidget(genderGroup); mainLayout->setContentsMargins(50, 50, 50, 50);}
MainWindow::~MainWindow() {}
-

2. QTabWidget(标签页控件)
-
核心作用:通过标签页切换不同的界面内容,节省界面空间(如浏览器标签页、软件的多功能面板)。
-
关键方法 :
- addTab(QWidget *page, const QString &label):添加标签页,指定页面控件和标签文本。
- setCurrentIndex(int index):设置默认选中的标签页(索引从 0 开始)。
-
使用示例:
#include "mainwindow.h"
#include <QGroupBox>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <qboxlayout.h>
#include <qlabel.h>MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("QTabWidget示例");
this->resize(300, 200);QTabWidget *tabWidget = new QTabWidget(this); this->setCentralWidget(tabWidget); // 标签页1 QWidget *tab1 = new QWidget(); QVBoxLayout *tab1Layout = new QVBoxLayout(tab1); tab1Layout->addWidget(new QLabel("这是标签页1的内容")); tabWidget->addTab(tab1, "标签1"); // 标签页2 QWidget *tab2 = new QWidget(); QVBoxLayout *tab2Layout = new QVBoxLayout(tab2); tab2Layout->addWidget(new QLabel("这是标签页2的内容")); tabWidget->addTab(tab2, "标签2"); // 默认选中标签页1 tabWidget->setCurrentIndex(0);}
MainWindow::~MainWindow() {}

二、复选按钮(QCheckBox)的分组(视觉 / 功能)
复选按钮默认支持 "多选",分组主要是视觉归类 ,或通过QButtonGroup实现 "组内互斥"(让复选框变成单选逻辑)。
1. 视觉分组:QGroupBox(仅归类,不影响多选)
用QGroupBox把相关复选框包起来,界面更整洁,但组内仍可多选(保持复选框的原生功能)。
代码示例(兴趣爱好分组):
#include "mainwindow.h"
#include <QCheckBox>
#include <QGroupBox>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <qboxlayout.h>
#include <qlabel.h>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("复选按钮视觉分组");
this->resize(300, 200);
QWidget *centralWgt = new QWidget(this);
this->setCentralWidget(centralWgt);
QVBoxLayout *mainLayout = new QVBoxLayout(centralWgt);
// 视觉分组:兴趣爱好(组内可多选)
QGroupBox *hobbyGroup = new QGroupBox("兴趣爱好");
QVBoxLayout *hobbyLayout = new QVBoxLayout(hobbyGroup);
QCheckBox *readBtn = new QCheckBox("阅读");
QCheckBox *sportBtn = new QCheckBox("运动");
QCheckBox *codeBtn = new QCheckBox("编程");
hobbyLayout->addWidget(readBtn);
hobbyLayout->addWidget(sportBtn);
hobbyLayout->addWidget(codeBtn);
mainLayout->addWidget(hobbyGroup);
}
MainWindow::~MainWindow() {}
