「C++ Qt6 开发」创建一个 Qt 项目
1 创建一个 Qt 项目
点击 Qt Creater 右上角的 Create Project 或者 菜单栏中的 New Project 创建项目,会出现如下对话框:
在对话框的左侧选择 Application (Qt),列表中列出的项目类型如下:
-
Qt Widget Application:
-
Qt Widget Application 是传统的桌面应用程序。使用了 Qt Widget 模块,基于 C++ 和 Qt 的原生 UI 组件。也就是具有窗口的 GUI 程序。
-
主要使用 C++ 语言,布局和交互逻辑通过代码或 UI 设计器(.ui 文件)实现。
-
适合开发功能复杂、数据密集、需要精细控制布局和交互的传统桌面应用程序,如 Windows/macOS/Linux 桌面应用、工业控制软件、办公软件等。
-
-
Qt Console Application
-
Qt Console Application 是没有图形用户界面 (GUI) 的控制台应用程序,是一个纯命令行/终端应用程序。
-
主要使用 C++。也可以使用 Qt for Python (PySide2/PySide6) 编写 Python 脚本。
-
提供对 Qt Core 模块(信号槽、容器、文件 IO、网络、线程、XML/JSON 处理等)的访问。提供基本的命令行输入/输出功能。
-
-
Qt Quick Application
-
Qt Quick Application 是 基于声明式语言 QML 的现代 UI 框架。Qt Quick 的核心技术主要为 QML + JavaScript + Qt C++ Backend。
-
QML (声明式,类似 JSON/JS) 和 JavaScript 进行 UI 和交互逻辑的设计;C++ (通过 QObject 派生类导出给 QML 使用) 处理核心业务逻辑。
-
适用于需要现代美观 UI、流畅动画的应用,通常是移动平台 (iOS, Android) 和 嵌入式设备 的首选,也非常适合需要现代风格的桌面应用和车载信息娱乐系统。如媒体播放器、仪表盘、IoT 控制面板、游戏 UI、移动 App。
Qt Quick Application (Compat) 采用的核心 UI 技术是 Qt Quick Controls 1 (基于 QWidget 的旧版 Qt Quick Controls),这是 Qt 5 早期版本的遗留技术,在后期已经不再使用。Qt Quick Application - Compat 模板是为了兼容旧项目而存在的。它强制链接 Qt Quick Controls 1 库 (Qt5QuickControls 或兼容模块)。
-
选择 Qt Widget Application 创建项目,项目名称设为 sample1_1
,并选择项目的存储路径。
选择好项目的存储路径后,出现选择构建系统界面:
构建系统默认为 qmake,学习初期基本上都会选择 qmake。
-
qmake:Qt 官方原生构建工具,简化了 Qt 项目的构建配置。 qmake 使用 .pro (项目) 和 .pri (包含) 文件,通过 声明式语法 简单直观地实现项目构建。
-
CMake:Cmake 是跨平台、跨语言的通用构建系统生成器,提供强大、灵活、可扩展的构建系统配置能力,支持复杂的项目结构和构建需求。使用 CMakeLists.txt 文件,通过 命令式(自定义脚本语言) 实现项目构建。
-
Qbs:Qbs(Qt Build Suite)是 Qt 公司开发的另一款跨平台构建工具,其通过声明项目结构、依赖和构建规则进行项目构建(基于 JavaScript)。但现在很少有项目使用。
接下来选择窗口基类。此处我们选择 QWidget 作为窗口基类,并记得选择复选框 Generate form,这样 Qt Creator 会创建窗体 form 文件,就可以使用 Qt Designer 来进行可视化界面的设计。
在 Qt 中,QMainWindow、QWidget 和 QDialog 是三个核心窗口基类:
-
QWidget(基础窗口部件)
-
是 所有 GUI 组件的基类(按钮、标签、输入框等都是它的子类)
-
可作为独立窗口(window)或嵌入其他组件的子部件(child widget)
-
适用于自定义控件(如绘制特殊图表)、简单弹窗(无需菜单/状态栏)、作为其他窗口的子容器等。
-
-
QMainWindow(主应用程序窗口)
-
专为复杂桌面应用设计的 主窗口框架
-
具有菜单栏,工具栏和状态栏等。
-
适用于办公软件(如 WPS)、IDE(如 Qt Creator)、多文档多视图应用等软件的开发。
-
-
QDialog(对话框窗口)
-
是模态/非模态交互的专用窗口。
-
模态控制包括:应用级模态(阻塞整个应用)、窗口级模态(仅阻塞父窗口)、非模态(异步)。
-
适用于 设置/配置窗口、登录对话框、文件保存/打开 等场景。
-
最后选择一个开发套件,开发套件包含了所用的编译器。此处选择 Desktop Qt 6.2.3 MinGW 64-bit-Debug 作为该项目的编译器。
Debug 是调试版本,二进制文件带有调试信息,编译时不进行优化;Release 是发行版本,不带有调试信息,针对运行速度对文件大小进行了优化;Profile 是介于 Debug 和 Release 之间的性能平衡版本,可用于调试。
2 Qt Widget 项目的文件组成
2.1 sample1_1.pro 文件
这是用 qmake 构建系统时的项目配置文件,包括关于项目的各种设置内容。
2.2 Headers 分组
Headers 中保存的是项目的 C++ 头文件,该项目中有一个 widget.h 头文件,这是窗口类的头文件。
1 |
|
这是头文件保护(Header Guard),防止头文件被多次包含。w为了避免在同一个编译单元中重复包含导致的重定义错误。
1 |
|
包含 Qt 的 QWidget 基类头文件。当前类继承自 QWidget,必须包含其声明。
1 |
|
QT_BEGIN_NAMESPACE/QT_END_NAMESPACE:封装 Qt 的命名空间声明。
namespace Ui { class Widget; }:前向声明 Ui::Widget 类
前向声明:Ui::Widget 是由 Qt UIC 工具自动生成的 UI 类(在 ui_widget.h 中定义)。前向声明避免了直接包含 UI 头文件,减少编译依赖和编译时间。
1 |
|
声明自定义类 Widget 继承自 QWidget,创建可视化窗口组件的基础。
Q_OBJECT 必须作为第一个声明。Q_OBJECT 宏:
- 启用 Qt 元对象系统(信号槽、属性系统、RTTI)
- 必须出现在所有使用信号槽的类中
- 由 moc(元对象编译器)处理生成额外代码
1 |
|
声明构造函数和析构函数。构造函数 中接收一个父窗口指针(默认为空),用于实现 Qt 的对象父子关系和内存管理;析构函数 负责资源释放,在实现文件中删除 ui 指针,遵循 RAII 原则管理资源。
1 |
|
声明指向 UI 类的私有指针。封装 UI 实现细节,外部无法直接访问。
创建指针使得 UI 生命周期由当前类控制。
1 |
|
结束类声明并关闭头文件保护,与开头的 #ifdef 配对。
2.3 Sources 分组
Sources 分组下包含了项目的 C++ 源程序文件,该项目中有两个 C++ 源程序文件:widget.cpp 是窗口类的程序文件,与 widget.h 对应;main.cpp 文件包含 main() 函数。
widget.cpp 是自定义窗口部件(Widget)的实现文件,主要用于:
- UI 初始化:创建并配置界面元素(标签、按钮、布局等)
- 交互逻辑:使用 信号与槽 机制处理事件,实现用户操作的响应(如按钮点击、文本输入)
- 数据处理:与业务逻辑交互(如读取文件、网络请求)
1 |
|
ui_widget 是 Qt 中由 Qt Designer(界面设计器) 自动生成的一个特殊类,用于存储和管理通过可视化设计创建的界面元素(如按钮、标签、布局等)。
在 Qt 项目中创建 .ui 文件(如 widget.ui)并通过 Qt Designer 设计界面时,Qt 的构建系统(qmake 或 cmake)会在编译阶段自动将 .ui 文件转换为 C++ 代码,生成 ui_widget.h 头文件。
这个头文件中定义的类就是 Ui::Widget(通常称为 ui_widget 类,因文件名派生),包含了所有界面元素的声明和初始化逻辑。
开发者无需手动编写创建和布局控件的代码,只需通过 Qt Designer 可视化设计,ui_widget 自动生成对应代码,降低了开发成本,便于维护。
1 |
|
ui_widget.h 中封装界面的类是 Ui_Widget
,再定义一个 Widget
类继承 Ui_Widget
,并定义在 Ui
命名空间中。这样 Ui::Widget
与文件 widget.h
中的类 Widget
同名,但是用空间区分开。
main.cpp 是程序的入口点,主要用于:
- 应用程序初始化:创建 QApplication 对象
- 主窗口创建与显示:实例化并显示主窗口,管理应用程序的 全局资源(如字体、样式)
- 事件循环启动:管理应用程序的生命周期,处理用户输入(鼠标、键盘)和系统事件,控制程序的启动与退出
1 |
|
2.4 Forms 分组
Forms 分组下是项目的窗体文件(.ui),也成为用户界面(UI)文件。该项目有一个 widget.ui 文件。
点击 widget.ui 文件,会切换到内置的 Qt Designer 界面,用于 UI 文件的界面可视化设计。
此处可以选择一个左侧组件栏中的 Label(标签)拖拽到窗体上,并双击修改其属性,将文字内容修改为 “Hello Marisa”。在属性编辑器中修改标签的 font 属性等。
3 项目的运行
点击左下角的 运行键,项目 sample1_1 运行界面如下:
参考
- 《Qt 6 C++ 开发指南》