Qt 完整新手入门教程(零基础,超详细) 一、Qt 用什么语言编程Qt 是跨平台图形界面开发框架支持多种编程语言主流两种C官方主推、性能最强、工业 / 桌面软件首选绝大多数桌面程序、嵌入式设备软件都用 Qt C学习 Qt 首选这套。QML JavaScript快速做现代化流畅界面移动端、炫酷 UI专门写动画、触控、轻量化界面逻辑可混用 JS也能和 C 互相调用。次要绑定很少新手用Python (PyQt/Pyside6)、Rust、Go 等。新手建议路线先学Qt C 控件开发Widgets再学 QML。二、Qt 核心基础概念必懂1. 核心定位一次编写到处运行一份代码不用大幅修改就能编译运行在Windows、Linux、macOS、Android、iOS、嵌入式 Linux、单片机。 不靠系统自带界面 APIQt 自带一套绘制引擎界面风格统一。2. Qt 两大界面体系完全分开表格体系技术适用场景特点传统桌面控件Qt WidgetsC办公软件、工具客户端、工控上位机按钮 / 文本框 / 表格等标准控件简单易上手适合传统窗口程序现代化动态界面Qt Quick(QMLJS/C)手机 APP、大屏、带动画、触控界面流畅动画、自定义控件、分层 UI学习门槛更高新手优先学Qt Widgets。3. Qt 独有的核心机制信号与槽Signal Slot这是 Qt 最灵魂、区别于普通 C 的特性用来处理界面交互事件。通俗解释信号 (Signal)控件触发的动作事件本身没有实现函数。 例按钮点击clicked()、输入框文字改变textChanged()、窗口关闭。槽 (Slot)自定义响应函数用来接收信号、执行逻辑。 例点击按钮后弹窗、读取输入内容、保存文件。连接逻辑信号源对象的信号连接到目标对象的槽函数触发自动执行。示例伪代码cpp运行// 按钮点击信号 连接 自定义的点击处理槽函数 connect(ui-pushButton, QPushButton::clicked, this, MainWindow::onBtnClick);4. Meta-Object 元对象系统信号槽底层支撑普通 C 不支持信号槽Qt 靠元对象系统扩展 C 语法组成三要素Q_OBJECT宏写在类头文件第一行启用元对象功能必须加否则信号槽失效MOC 工具Qt 自带预编译器编译时扫描带Q_OBJECT的类自动生成元代码关键字扩展signals:声明信号、slots:声明槽函数5. 父对象内存管理自动垃圾回收新手必记Qt 所有控件都继承QObject自带父子管理机制彻底避免内存泄漏创建控件时传入父对象new QPushButton(this)父窗口销毁时会自动删除所有子控件不用手动 delete顶层窗口MainWindow父对象为空程序退出系统自动回收。三、Qt 开发环境Qt Creator新手唯一推荐 IDE1. 组成代码编辑器、UI 可视化拖拽设计器、编译器、调试器、Qt 帮助文档、构建工具 (qmake/CMake)2. 两种构建系统项目管理qmake老、简单新手入门推荐配置文件后缀.pro语法简单适合小型学习项目。CMake新标准大型工程、新版本 Qt 默认配置文件CMakeLists.txt企业大型项目主流后期再学。四、Qt C 基础类分层继承树核心所有界面类顶层基类QObject元对象、信号槽、父子内存管理所有控件父类QWidget继承 QObject所有窗口 / 控件基类按钮、输入框、窗口都是 Widget窗口类QMainWindow主窗口带菜单栏工具栏新手默认模板、QDialog弹窗、QWidget空白基础窗口常用基础工具类不显示界面纯逻辑QString字符串、QList动态数组、QFile文件读写、QTimer定时器、QNetworkAccessManager网络请求五、新手标准工程QMainWindow 项目结构新建 Qt Widgets Application自动生成 4 个核心文件main.cpp程序入口#include QApplication #include mainwindow.h int main(int argc, char *argv[]) { // 应用程序实例必须第一个创建 QApplication a(argc, argv); // 创建主窗口对象 MainWindow w; w.show(); // 显示窗口 return a.exec(); // 开启事件循环监听按钮点击、鼠标等操作 }mainwindow.h头文件类声明、槽函数、UI 指针#ifndef MAINWINDOW_H #define MAINWINDOW_H #include QMainWindow QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT // 启用信号槽必不可少 public: MainWindow(QWidget *parent nullptr); ~MainWindow(); // 自定义槽函数 private slots: void onBtnClicked(); private: Ui::MainWindow *ui; // 自动关联UI拖拽界面的指针 }; #endif // MAINWINDOW_Hmainwindow.cpp实现文件函数逻辑、信号槽连接#include mainwindow.h #include ui_mainwindow.h #include QMessageBox MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui-setupUi(this); // 加载拖拽设计的UI界面 // 信号槽连接 connect(ui-pushButton, QPushButton::clicked, this, MainWindow::onBtnClicked); } MainWindow::~MainWindow() { delete ui; } // 按钮点击槽函数实现 void MainWindow::onBtnClicked() { // 获取输入框文字 QString text ui-lineEdit-text(); // 弹出提示框 QMessageBox::information(this, 提示, 你输入的内容 text); }mainwindow.ui可视化界面文件 双击用 Qt Designer 打开拖拽按钮、输入框、标签不用手写布局代码控件自动绑定到ui-xxx。六、UI 设计器基础操作新手天天用左侧工具箱所有控件PushButton 按钮、LineEdit 单行输入、Label 文本、TableWidget 表格等右侧对象查看器修改控件名称ObjectName代码通过 ui- 名字调用属性面板修改文字、大小、颜色、字体、禁用 / 隐藏控件布局 Layout重点解决窗口缩放错乱水平布局控件横向均匀排列垂直布局控件纵向排列栅格布局表格式多行多列摆放 选中多个控件右键→布局窗口拉伸时控件自动适配大小。七、Qt 数据类型基础替代原生 C 类型1. QString 字符串必用代替 std::stringQString str Qt新手; // 数字转字符串 QString numStr QString::number(123); // 字符串转数字 int num str.toInt(); // 拼接 QString res str 学习;2. 容器动态数组QListT通用动态数组存按钮、字符串、数字QMap键,值键值对字典3. 基础窗口弹窗QMessageBox提示、警告、错误弹窗QFileDialog打开文件 / 选择文件夹窗口QInputDialog弹出输入框获取用户文字八、事件循环机制a.exec () 原理QApplication::exec()开启无限事件循环监听系统事件鼠标点击、键盘输入、窗口缩放、定时器到时事件分发到对应控件触发信号信号触发绑定的槽函数执行逻辑 关闭窗口后循环退出程序结束。九、新手入门学习顺序不走弯路安装 Qt Creator 匹配编译器MinGW/VS MSVC新建 QMainWindow 项目熟悉 4 个基础文件拖拽 UI 控件、修改 ObjectName、使用布局掌握信号与槽三种写法实现按钮弹窗、读取输入框学习基础工具类QString、QTimer 定时器、QMessageBox窗口之间传值、QDialog 弹窗使用文件操作 QFile进阶表格控件、绘图 QPainter最后学习 Qt Quick QML 做炫酷界面十、新手高频踩坑提醒类里忘记写Q_OBJECT→ 信号槽编译报错拖拽控件没改 ObjectName代码找不到 ui 里的控件控件不设置布局拉大窗口后控件位置错乱connect 连接写错参数点击按钮无响应可加connect第五个参数检测报错忘记包含头文件使用类提示未定义Qt Creator 按 F1 快速查头文件中文乱码Qt5 默认 utf8pro 文件添加QT_CHARSETS utf8