QT入门基础
QT作为一个C++的GUI框架,编程语法和C++都差不多,上手还是比较快的。但是学习一个新的技术,总有一些新的概念是不清楚的,所以需要先了解一下这些概念。
1、QT软件系
- QT:安装时会指定某个版本的QT,这个QT指QT库(类似SDK)
- QT Creator:其实就是IDE,负责代码的编辑、调试、构建等
- Qt Designer:独立的可视化UI设计工具,用于创建.ui文件。有了这个可以手动拖拽进行界面设计。
一般都是QT Designer设计UI界面生成ui文件,然后QT creator作为IDE进行代码编辑开发。如果使用visual studio开发QT,那么就可以不安装QT creator了,而是使用vs作为开发IDE。
2、构建工具
对于一个大型项目,一般的流程如下:
Qt 项目构建流程:
[源代码] ↓
[构建工具 (qmake / CMake)] → 生成 [编译指令] ↓
[编译器 (MSVC / MinGW)] → 生成 [可执行文件]
QT中构建工具有qmake和cmake两种,qmake是官方早期默认的构建工具,其基于.pro文件(即项目配置文件),简单易用适合小型或传统Qt项目。pro文件实例:
QT += core gui widgets # 依赖的 Qt 模块
TARGET = MyApp # 生成的可执行文件名
SOURCES += main.cpp # 源代码文件
HEADERS += myclass.h # 头文件
RESOURCES += res.qrc # Qt 资源文件
CMake构建工具耳熟能详,也已被官方所支持,是现在Qt推荐的构建工具,在Qt6后开始默认支持,CMakeLists.txt示例:
cmake_minimum_required(VERSION 3.16)
project(MyQtApp)# 查找 Qt 6 核心模块
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)# 添加可执行文件
add_executable(MyApp main.cpp)# 链接 Qt 库
target_link_libraries(MyApp PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)# 自动处理 moc、uic、rcc
set_target_properties(MyApp PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON)
切换两种构建工具非常简单,如果直接打开 .pro 文件,Qt Creator 会自动调用 qmake,直接打开 CMakeLists.txt,Qt Creator 会自动识别CMake。
3、编译工具
QT中常用的编译工具有两种:MSVC(Microsoft Visual C++)和MinGW(Minimalist GNU for Windows):
对比项 | MSVC (Microsoft Visual C++) | MinGW (Minimalist GNU for Windows) |
---|---|---|
开发商 | 微软 | GNU社区 |
许可证 | 专有(社区版免费) | 开源(GPL) |
编译器核心 | cl.exe | g++.exe |
运行时库 | MSVCRT.dll | libstdc++/libgcc |
Windows支持 | 深度优化,完全兼容 | 通过MinGW-w64提供支持 |
跨平台性 | 仅限Windows | 支持跨平台代码 |
性能优化 | Windows专属优化 | 通用优化 |
典型用途 | Windows专业软件 | 跨平台工具 |
安装复杂度 | 需安装VS(体积大) | 独立安装(体积小) |
4、开发套件(development kit)
Qt提供了多种构建、编译、调试等工具,选择一种搭配后就形成了所谓的开发套件。所以开发套件(Kit) 就是指一组配置,用于定义如何构建和运行 Qt 项目。它主要包括 Qt 版本、编译器、调试器 等工具的组合。
一套源码可以使用多个开发套件进行编译,所以一个项目也可以有多个开发套件配置。
一个完整的 Qt 开发套件通常包含以下组件:
组件 | 说明 |
---|---|
Qt 版本 | 指定使用的 Qt 库(如 Qt 5.15.2、Qt 6.5.1),不同版本可能支持不同模块。 |
编译器 | 用于编译代码(如 MSVC、MinGW、GCC、Clang)。 |
调试器 | 用于调试程序(如 GDB、CDB、LLDB)。 |
构建工具 | 如 qmake 或 CMake,用于生成 Makefile 或 Ninja 构建文件。 |
目标设备 | 指定运行平台(如 Windows、Linux、Android、嵌入式设备)。 |
【如何查看当前套件选择状态?】
5、安装
了解以上基本信息后,可以参考较为详细的QT安装教程:《【保姆级图文教程】最新Windows系统QT下载、安装、入门、配置VS Qt环境,图文详细、内容充实》进行安装。
安装成功后,可以打开MaintenanceTool(有软件图标或者在安装目标下的MaintenanceTool.exe)重新打开安装管理面板进行组件的添加、删除和升级,或卸载Qt。
在安装目录下的版本号文件夹内,是对于版本Qt的开发套件,Qt 库、头文件、版本特定的工具,总之是一些依赖版本的工具。
而Tools下安装的是一些工具软件,比如CMake、Qt Creator等不依赖具体版本的工具,比如Creator可以管理多个版本的Qt。
6、创建项目
创建项目后,会看到项目的组织结构书:
- *.pro:使用qmake构建系统时的配置文件,包括项目的各种设置内容。
- Headers分许:C++的头文件,默认有一个widget.h时窗口类的头文件
- Sources分组:C++的源文件,默认有widget.cpp窗口类源码和main.cpp主函数源码
- Forms分组:窗体ui文件,默认有一个widget.ui文件。双击ui文件会自动进入QT Designer中可视化设计界面
7、项目的构建、调试和运行
点击左侧Projects扳手图标,会切换到Projects设置界面。
在左侧Build&Run显示了所有的开发套件,选中某个套件的build选项后可以进行设置。在某套件的build设置页面有Shadow build狂,表示构建项目时在项目同级目录下创建一个输出文件夹,文件夹名为套件名+构建模式。这样的好处是使用多个套件build项目时会存放到不同的文件夹。所以只有一个开发套件构建时,则不需要勾选。
【待细节】
8、qmake配置文件
在创建项目时选择qmake构建工具,则项目会默认生成一个qmake的配置文件即.pro文件,qmake的常用配置:
变量 | 含义 |
---|---|
QT | 项目中使用的Qt模块列表 |
CONFIG | 项目的常规配置表,在用到某些模块时需要手动添加 |
DEFINES | 项目中的预处理定义列表,例如可以定义一些用于预处理的宏 |
TEMPLATE | 项目使用的模板,可以是应用程序(app)。如果不设置就默认为应用程序 |
HEADERS | 项目中的头文件(.h文件)列表 |
SOURCES | 项目中的源文件(.cpp文件)列表 |
FORMS | 项目中的UI文件(.ui文件)列表 |
RESOURCES | 项目中的资源文件(.qrc文件)列表 |
TARGET | 项目构建后生成的应用程序的可执行文件名称 |
DESTDIR | 目标可执行文件的存放路径 |
INCLUDEPATH | 项目用到其他头文件的搜索路径列表 |
DEPENDPATH | 项目其他依赖的头文件的搜索路径列表 |
当新添加文件时,qmake会自动更新配置文件,或者右键项目名点击Add Existing Files可以将已存在的文件添加到项目中。
9、main.cpp
作为整个程序的入口,其默认内容如下:
#include "mainwindow.h" // 主窗口头文件(如果是Widgets项目)
#include <QApplication> // Qt应用程序类int main(int argc, char *argv[])
{QApplication a(argc, argv); // 创建Qt应用程序对象MainWindow w; // 创建主窗口对象w.show(); // 显示主窗口return a.exec(); // 进入主事件循环
}
QApplication类是管理整个Qt应用程序的生命周期和系统行为,处理事件循环(如鼠标点击、键盘输入、窗口重绘等)、解析命令行参数(argc, argv)、提供全局设置(如样式表、字体、本地化等)。每个 Qt GUI 程序必须有且只有一个 QApplication 对象(控制台程序用 QCoreApplication)。存活周期从程序启动到退出,贯穿整个运行过程。
MainWindow通常是应用程序的主界面窗口(继承自 QMainWindow),提供菜单栏、工具栏、状态栏等标准界面组件、管理子窗口或控件(如按钮、表格等)、处理用户与界面的交互逻辑等。
在顺序上, Qt的所有 GUI 操作(包括窗口创建、信号槽、样式表等)都依赖 QApplication 初始化底层系统资源,所以MainWindow必须在QApplication之后。其次a.exec()必须在最后,因为这是一个阻塞调用,比如在所有调用结束后再开始。