604 字
2 分钟
【QT】入门与构建
前置知识:事件循环
事件循环是图形界面程序的核心机制。程序不断接收并分发各类事件(鼠标、键盘、定时器等)到对应对象处理。
Qt 通过 QCoreApplication::exec() 或 QApplication::exec() 启动事件循环。调用后程序进入等待状态,直到调用 quit() 或关闭主窗口才退出。
QApplication app(argc, argv);MainWindow w;w.show();return app.exec(); // 进入事件循环链接库
Qt 以动态库(.dll、.so、.dylib)或静态库(.lib、.a)形式提供。
| 方式 | 优点 | 缺点 |
|---|---|---|
| 动态链接 | 可执行文件小,升级库方便 | 部署时需带上 Qt 运行时 |
| 静态链接 | 单文件部署,无外部依赖 | 体积大,许可需注意 |
常用模块(Qt5 命名示例):
Qt5Core:核心(信号槽、字符串、容器、事件循环)Qt5Gui:图形(窗口、图像、字体)Qt5Widgets:桌面控件
构建工具:qmake 与 CMake
| 工具 | 说明 |
|---|---|
| qmake | Qt 传统构建工具,通过 .pro 描述项目,生成 Makefile |
| CMake | 跨平台推荐;Qt6 官方主推,与 IDE 集成更好 |
qmake 示例(.pro):
QT += core gui widgetsSOURCES = main.cpp mainwindow.cppHEADERS = mainwindow.hCMake 示例(CMakeLists.txt):
cmake_minimum_required(VERSION 3.16)project(MyQtApp)
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
qt6_add_executable(MyQtApp main.cpp mainwindow.cpp)target_link_libraries(MyQtApp Qt6::Core Qt6::Widgets)Qt6 项目常用 qt6_standard_project_setup() 与 qt6_add_executable();旧版 Qt5 对应 find_package(Qt5 ...) 与 qt5_wrap_ui 等宏。
Qt 概述
- 跨平台:Windows、Linux、macOS、Android、iOS 等
- 模块化:Core、Gui、Widgets、Network、Sql、Multimedia、Qml 等
- 信号与槽:类型安全的对象间通信
- 工具链:Qt Designer、Qt Creator、qmake/CMake、QML
跨平台原理
-
平台抽象层(QPA)
窗口系统、输入、OpenGL 等差异抽象为统一接口;各平台实现插件(如qwindows、qxcb、qcocoa),运行时自动加载。 -
自绘机制
Qt Widgets 多用QPainter自绘,外观一致且可用 QSS 定制;不依赖各系统原生控件 API。 -
统一 API + 条件编译
底层按平台调用不同系统 API;平台相关代码用Q_OS_WIN、Q_OS_LINUX等宏隔离。 -
跨平台工具链
qmake/CMake 按目标平台生成 Makefile、Visual Studio 工程等。
构建流程(MOC / UIC / RCC)
main.cppmainwindow.h ──► moc ──► moc_mainwindow.cppmainwindow.ui ──► uic ──► ui_mainwindow.hresources.qrc ──► rcc ──► qrc_resources.cpp ├─────────────────────────────┐ └──► C++ 编译器 + 链接器 ──► 可执行文件| 工具 | 全称 | 作用 |
|---|---|---|
| MOC | Meta-Object Compiler | 处理含 Q_OBJECT 的头文件,生成 moc_*.cpp(信号槽、元对象反射) |
| UIC | UI Compiler | 将 .ui 转为 ui_*.h,内含 setupUi() |
| RCC | Resource Compiler | 将 .qrc 转为 qrc_*.cpp,把图片、翻译等嵌入二进制 |
含 Q_OBJECT 的类必须经 MOC 处理,否则链接阶段会报 vtable 或 staticMetaObject 相关错误。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
相关文章 智能推荐
1
【QT】布局与QSS
StudyNotes 介绍 QHBoxLayout 等布局管理、QSS 选择器语法及与 QPalette、QStyle 的关系。
2
【QT】交叉编译与部署
StudyNotes 以 NXP i.MX 为例说明交叉工具链配置、Qt Creator Kits 及嵌入式板端部署要点。
3
【QT】信号槽与事件
StudyNotes 讲解信号与槽的 connect 写法、连接类型、事件处理与 eventFilter 及 QTimer 定时器。
4
【QT】核心类型与容器
StudyNotes 介绍 QObject 对象树、QString、顺序与关联容器及迭代遍历方式。
5
【QT】对话框与常用控件
StudyNotes 涵盖 QFileDialog、QMessageBox 等标准对话框及按钮、输入、视图等常用控件分类。
