目录
2.QMainWindow:是主程序的大窗口(软件的主界面)
QPushButton、QRadioButton、QCheckBox
QLineEdit、QTextEdit、QPlainTextEdit
QListWidget、QTreeWidget、QTableWidget
QGroupBox、QTabWidget、QScrollArea
一、基础窗口类
QMainWindow、QDialog、QWidget对比
1.QWidget:是所有窗口控件的基类
特点:
- 最轻量,没有内置菜单栏,工具栏,控制栏;
- 可以当独立窗口(show()),也能嵌入其他窗口,适合小型的简易页面
创建:Widget w; w.show();
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 1. 创建顶层窗口,根容器就是QWidget
QWidget w;
w.setWindowTitle("纯QWidget窗口");
w.resize(300, 200);
// 2. 创建子控件
QLabel *label = new QLabel("这是QWidget基础窗口", &w);
QPushButton *btn = new QPushButton("点击测试", &w);
// 3. 垂直布局,把控件放入窗口
QVBoxLayout *layout = new QVBoxLayout(&w);
layout->addWidget(label);
layout->addWidget(btn);
// 按钮点击槽函数
QObject::connect(btn, &QPushButton::clicked, [=](){
qDebug() << "按钮被点击";
label->setText("你点了按钮!");
});
// 显示窗口
w.show();
return a.exec();
}
2.QMainWindow:是主程序的大窗口(软件的主界面)
它继承自QWidget,是完整主窗口框架,专门做软件首页
内置专属布局结构(独有):
┌───────────────────── 菜单栏 menuBar
├───────────────────── 工具栏 toolBar
├───────────────────── 中心窗口 centralWidget(必须放你的界面控件)
├───────────────────── 停靠窗口 dockWidget
└───────────────────── 状态栏 statusBar
适用场景:编辑器、绘图软件、播放器、管理系统这类大型程序主界面
强制规则:必须给它设置 centralWidget,否则控件无法显示
centralWidget
它是一个中间区域承载控件的容器,他的本质就是一个普通的 QWidget,作为中间布局的根容器,你的所有 UI 控件(按钮、输入框、布局)都要放在它里面。
两种使用方式:
- 可视化拖拽:新建 MainWindow 工程时,软件会自动生成一个 centralWidget,你拖拽所有控件到界面上,全部放在这个中心部件里,不用手动写代码。
- 代码手动创建
// 1. 创建主窗口
QMainWindow w;
// 2. 创建中心容器
QWidget *central = new QWidget();
// 给中心部件设置布局
QVBoxLayout *lay = new QVBoxLayout(central);
lay->addWidget(new QPushButton("测试按钮"));
// 3. 把容器设置给主窗口的 centralWidget
w.setCentralWidget(central);
w.show();
3.QDialog:弹窗对话框
专门做弹窗,提示框,二级弹出页面
特点:
- 默认带(确认/取消按钮),如果窗口弹出,无法操作父窗口;
- 没有菜单栏,工具栏,状态栏;
- 两种模式:
- 模态
exec():卡住主线程,必须关弹窗才能操作主界面; - 非模态
show():弹窗和主窗口可同时操作
- 模态
适用场景:登录弹窗、确认提示、设置窗口、文件选择框
自带便捷的子类:QMessageBox消息框、QFileDialog文件选择器,都属于 Dialog 体系
如何选择?
如果你想写小工具,简易的页面(计算器)--->直接用QWidget
如果你想做软件主界面,需要菜单栏,工具栏,底部状态文字 --->QMainWindow
如果点击按钮可以弹出一个小窗口(登录/确认/参数设置)--->QDialog
二、布局管理
布局管理器 QLayout
Qt 内置常用布局:
-
QHBoxLayout 水平布局:控件从左到右横向依次排列
-
QVBoxLayout 垂直布局:控件从上到下纵向依次排列
-
QGridLayout 网格布局:表格形式多行多列摆放
-
QFormLayout 表单布局:标签 + 输入框成对布局(登录界面常用)
原理
布局自动接管所有子控件:
窗口拉伸时,布局自动分配空间,自动调整控件位置与大小,自适应窗口。
优点
-
窗口缩放,界面自动适配;
-
不需要手动写坐标,代码简洁;
-
支持控件间距、边距、拉伸比例设置。
缺点
不能随心所欲把控件摆到任意坐标,遵循排列规则。
3. 核心冲突
一个控件不能同时使用布局 + 绝对定位
-
父控件设置布局 → 布局接管子控件几何信息,
setGeometry()无效 -
如果想要
setGeometry()生效:不能给父控件布置局
】&spm=1001.2101.3001.5002&articleId=163065829&d=1&t=3&u=3ecc97a5db1243b4a8498f121f2bab38)
2万+

被折叠的 条评论
为什么被折叠?



