chase-hung

导航

 

环境

系统: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\   

执行成功,如下图所示:

posted on 2025-12-13 18:41  chase_hong  阅读(2)  评论(0)    收藏  举报