在CMake中构建Qt项目意味着能够高效地管理和编译Qt应用程序和库。CMake提供了一套强大的工具和方法来处理Qt的特殊构建需求,如MOC(元对象编译器)处理、UI文件和资源的管理。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyQtProject
TEMPLATE = app
SOURCES += main.cpp
FORMS += MainWindow.ui
#include <QApplication>
#include <QMainWindow>
#include "ui_MainWindow.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QMainWindow mainWindow;
Ui::MainWindow ui;
ui.setupUi(&mainWindow);
mainWindow.show();
return app.exec();
}
cmake_minimum_required(VERSION 3.10)
project(MyQtProject)
#设置Qt的安装路径,如果Qt没有在环境变量中
#set(CMAKE_PREFIX_PATH "/path/to/Qt")
# Find the QtWidgets library
find_package(Qt5Widgets CONFIG REQUIRED)
# 启用自动MOC、UIC和RCC
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
# Add an executable
add_executable(MyQtProject main.cpp MainWindow.ui)
# Use the Widgets module from Qt 5
target_link_libraries(MyQtProject Qt5::Widgets)
MOC(Meta-Object Compiler):
作用:MOC是一个元对象编译器,用于处理Qt的信号与槽机制以及其他一些通过Q_OBJECT
宏启用的元对象系统的特性。
原理:当你在类定义中使用Q_OBJECT
宏时,MOC将读取这个头文件,生成一个包含元信息(如信号、槽、属性)的附加源文件。这个附加的源文件在编译时与原始类的源文件一起编译。
重要性:没有MOC的处理,Qt的信号和槽机制无法正常工作。
UIC(User Interface Compiler):
作用:UIC是用户界面编译器,用于将由Qt Designer创建的.ui
文件(XML格式)转换成C++源代码。
原理:UIC会生成一个头文件,这个文件包含创建和布局UI组件所需的代码。这样,开发者可以直接在代码中使用这些组件。
重要性:UIC使得开发者能够方便地通过Qt Designer设计UI,并在应用程序中使用这些设计。
RCC(Resource Compiler):
作用:RCC是资源编译器,用于将资源文件(如图片、翻译文件、其他文件)编译成二进制格式。
原理:RCC会处理.qrc
资源文件,这些文件以XML格式列出了项目中使用的资源。RCC生成一个包含资源数据的源文件。
重要性:RCC允许开发者将资源文件(如图标、翻译文件等)嵌入到应用程序的二进制文件中,方便资源的打包和部署
CMAKE_AUTOMOC
, CMAKE_AUTORCC
, CMAKE_AUTOUIC
自动处理MOC、RCC和UIC。find_package
中明确指定需要的Qt模块。target_link_libraries
正确链接Qt库。QT += core gui
CMake中Qt添加包的方式,如果是Qt6就把Qt5改成Qt6
注意部分模块Qt6没有了,详情的话查官方文档
Qt5: https://doc.qt.io/qt-5/qtmodules.html
Qt6: https://doc.qt.io/qt-6/qtmodules.html
find_package(Qt5 COMPONENTS Widgets Network REQUIRED)
target_link_libraries(YourApp Qt5::Widgets Qt5::Network)