环境
系统:Windows 10专业版
CMake版本:3.31.5
Visual Studio版本:2019
Qt版本:5.15.2
准备工作
1.安装CMake,并确保CMake的运行程序添加到环境变量中;
2.安装Visual Studio 2019,并确保勾选了“使用C++的桌面开发”;
3.安装通信灵码IDE,并登录(非必须,可以用Visual Studio Code代替,或直接用CMD);
4.安装Qt5,并记住其目录。
操作步骤
1.在“CMake-模块化”的基础上,新建一个文件夹,并命名为“Qml”,然后添加下面三个文件:
main.qml
// 导入QtQuick 2.12模块,提供QML基本功能
import QtQuick 2.12
// 导入QtQuick.Window 2.12模块,提供窗口管理功能
import QtQuick.Window 2.12
// 创建Window窗口组件
Window {
// 设置窗口可见性为true,使窗口显示
visible: true
// 设置窗口宽度为640像素
width: 640
// 设置窗口高度为480像素
height: 480
// 设置窗口标题,使用qsTr()函数支持国际化翻译
title: qsTr("Hello QML")
}
Qml.cmake
# 定义QML变量并设置值为"1",用于标识使用QML模式
set(QML "1")
# 启用自动RCC功能(Qt Resource Compiler),自动处理.qrc资源文件
set(CMAKE_AUTORCC ON)
# 查找Qt5的Quick组件,这是QML开发必需的组件
find_package(Qt5 COMPONENTS Quick REQUIRED)
# 递归搜索当前目录下的所有.qrc资源文件,并将结果存储在QML_QRC变量中
file(GLOB_RECURSE QML_QRC "${CMAKE_CURRENT_LIST_DIR}/*.qrc")
Qml.qrc
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>
添加完成,目录结构如下图所示:
2.修改CMakeLists.txt文件,内容如下:
CMakeLists.txt
# 指定所需的最低CMake版本
cmake_minimum_required(VERSION 3.15.0)
# 定义项目名称
project(study_cmake)
# 初始化变量用于存储源文件
set(WIDGET_FILES)
set(QML_FILES)
# 启用自动MOC功能(Qt Meta-Object Compiler)
set(CMAKE_AUTOMOC ON)
# 查找Qt5组件Widgets
find_package(Qt5 COMPONENTS Widgets REQUIRED)
# 条件编译:检查是否定义了QML变量
if(DEFINED QML)
list(APPEND QML_FILES ${QML_QRC})
else()
# 如果没有定义QML,则包含Widget构建配置
include(Widget/Widget.cmake)
# 将Widget相关文件添加到构建中
list(APPEND WIDGET_FILES ${SRC_WIDGETS} ${HEADER_WIDGETS} MainWidget.h MainWidget.cpp)
endif()
# 创建可执行文件,包含主源文件和相关依赖文件
add_executable(${PROJECT_NAME} main.cpp ${WIDGET_FILES} ${QML_FILES})
# 链接Qt5 Widgets库
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets)
# 添加包含目录路径
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/Widget)
# 如果定义了QML,则启用QML支持
if (DEFINED QML)
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_QML)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Quick)
endif()
3.修改main.cpp文件,内容如下:
main.cpp
// 包含Qt应用程序类,用于创建和管理Qt应用程序
#include <QApplication>
// 条件编译:如果定义了USE_QML宏,则包含QML应用引擎;否则包含MainWidget头文件
#ifdef USE_QML
#include <QQmlApplicationEngine>
#else
#include "MainWidget.h"
#endif
// 应用程序入口函数
int main(int argc, char* argv[])
{
// 创建QApplication实例,管理应用程序的控制流和主要设置
QApplication app(argc, argv);
#ifdef USE_QML
// 创建QML应用引擎实例,用于加载和运行QML文件
QQmlApplicationEngine engine;
// 定义QML文件的URL路径,从Qt资源系统加载main.qml
const QUrl url(QStringLiteral("qrc:/main.qml"));
// 连接信号槽:当QML对象创建完成时进行检查
// 如果对象创建失败且URL匹配,则退出应用程序
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
// 加载指定的QML文件
engine.load(url);
#else
// 创建MainWidget窗口实例
MainWidget w;
// 显示窗口
w.show();
#endif
// 启动应用程序事件循环,等待用户操作
return app.exec();
}
4.点击菜单栏中的“终端”->“新建终端”,然后在命令行中分别执行下面两条命令(等第一条执行完,再执行第二条):
//终端路径为CMakeLists.txt所在目录
//其中CMAKE_PREFIX_PATH的值请修改成实际安装的目录
cmake -S . -B WIN -DCMAKE_PREFIX_PATH=C:\Qt\5.15.2\msvc2019_64\lib\cmake
cmake --build .\WIN\
执行成功,如下图所示:
浙公网安备 33010602011771号