Qt Creator + CMake 构建教程的方法步骤

 更新时间:2025年02月27日 10:13:28   作者:falwat  
本文主要介绍了Qt Creator + CMake 构建教程的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

此教程基于:

  • Qt 6.7.4
  • Qt Creator 15.0.1
  • CMake 3.26.4

Qt 6 以下的版本使用 CMake 构建可能会存在一些问题.

此教程描述了如何一步步在 Qt Creator 中使用 CMake 构建应用程序工程. 涉及 新建窗体工程, 更新翻译, 添加资源, 以及软件部署等环节.

新建窗体工程

此过程描述如何在Qt Creator中新建一个使用 CMake 构建的窗体应用程序.

  • 运行 Qt Creator, 点击Welcome页中的 Create Project... 按钮.
  • 在新建工程对话框中选择: Application(Qt) | Qt Widgets Application, 点击右下角 Choose… 按钮.

在这里插入图片描述

  • 设置新建工程的名称和路径, 点击 Next.

在这里插入图片描述

  • 构建系统选择: CMake, 点击 Next.

在这里插入图片描述

  • 类信息页不做修改, 点击 Next.

在这里插入图片描述

  • 翻译文件页, 选择: Chinese(China), 点击 Next.

在这里插入图片描述

  • 点击 Finish 按钮, 完成新建工程.

在这里插入图片描述

  • 新建工程完毕后, 开发界面如下图所示. 工程的构建, 调试, 运行, 以及编译套件和编译配置的切换分别对应图中的1,2,3,4.

在这里插入图片描述

  • 这里我们选择 Desktop_Qt_6_7_3_MSVC2019_64bit.

在这里插入图片描述

  • 点击 构建 按钮, 完成工程的编译; 点击 运行 按钮, 运行示例程序.

更新翻译

  • 使用 Linguist 打开 helloworld_zh_CN.ts(建议将 .ts 文件的打开方式直接设置为 Linguist)

在这里插入图片描述

  • 设置 MainWindow 的中文翻译为: 主窗体, 确认并保存.

在这里插入图片描述

  • 注释掉: qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES}), 并添加: qt_add_translations(TARGETS helloworld TS_FILES ${TS_FILES}) (helloworld 是此工程的构建目标), 然后保存.

在这里插入图片描述

  • 切换到Projects 模式页, 点击 Add Build Step 工具按钮, 选择 CMake Build 菜单.

在这里插入图片描述

- 勾选 update_translations目标, 去除勾选 all目标, 并将此构建步骤向上移动 (或直接修改构建步骤中的第一个)

在这里插入图片描述

  • 点击 Build 按钮, 重新构建. 从编译输出窗口中, 可以看到程序的构建过程为:

    更新 helloworld_zh_CN.ts;

    生成 helloworld_zh_CN.qm;

    链接生成 helloworld.exe.

在这里插入图片描述

- 点击 Run按钮运行此程序, 可以看到主窗体的标题栏已经显示为中文.

在这里插入图片描述

添加资源

此过程, 我们将添加一个图标资源, 并将此图标设置为主窗体的窗口图标.

  • 使用资源管理器打开工程所在目录, 新建名为 images 的文件夹, 并将图标logo.png放置到此文件夹下.
  • 在 CMakeLists.txt 文件中添加:
 # qt_add_resources(<TARGET> <RESOURCE_NAME> [PREFIX <PATH>] [FILES ...])
    qt_add_resources(helloworld imageresources
        PREFIX "/"
        FILES images/logo.png
    )

其中, FILES参数指定要添加的文件

  • 点击 Build 按钮, 完成构建. 此时在工程视图中可以看到logo.png已添加到工程的资源文件中.

在这里插入图片描述

  • 修改 MainWindow.cpp, 在其中指定窗体图标.
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowIcon(QIcon(":/images/logo.png")); // TODO:
}
  • 再次构建, 并运行. 此时窗口图标已更换为我们指定的图标文件.

在这里插入图片描述

软件部署(Deploy)

构建生成的 helloworld.exe 在目标计算机上运行, 还需要一系列依赖的动态库. Qt 提供了 qt_generate_deploy_app_script() 命令, 可以方便的打包应用程序所需的运行环境.

  • 在 CMakeLists.txt 中添加以下代码, 生成部署脚本:
qt_generate_deploy_app_script(
    TARGET helloworld
    OUTPUT_SCRIPT deploy_script
    NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})
  • 在 CMakeLists.txt 中设置安装目录前缀 (CMAKE_INSTALL_PREFIX )为 ${PROJECT_BINARY_DIR}/install:
set(CMAKE_INSTALL_PREFIX ${PROJECT_BINARY_DIR}/install)
  • 切换到工程模式, 添加构建步骤, 设置构建目标为install:

在这里插入图片描述

  • 点击Build 按钮, 完成构建, 在编译输出窗口可以看到如下信息:
12:36:02: Starting: "C:\Program Files\CMake\bin\cmake.exe" --build D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug --target install
[0/1 ?/sec] Install the project...
-- Install configuration: "Debug"
-- Writing D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/install/bin/qt.conf
-- Running Qt deploy tool for D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/helloworld.exe in working directory 'D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/install'
'C:/Qt/6.7.3/msvc2019_64/bin/windeployqt.exe' 'D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/helloworld.exe' '--dir' '.' '--libdir' 'bin' '--plugindir' 'plugins' '--qml-deploy-dir' 'qml' '--translationdir' 'translations' '--force' '--qtpaths' 'C:/Qt/6.7.3/msvc2019_64/bin/qtpaths6.exe'
D:\workspace\qt\helloworld\build\Desktop_Qt_6_7_3_MSVC2019_64bit-Debug\helloworld.exe 64 bit, debug executable
Adding in plugin type generic for module: Qt6Gui
Skipping plugin qinsighttrackerd.dll. Use -deploy-insighttracker if you want to use it.
Adding Qt6Network for qtuiotouchplugind.dll from plugin type: generic
Adding in plugin type iconengines for module: Qt6Gui
Adding Qt6Svg for qsvgicond.dll from plugin type: iconengines
Adding in plugin type imageformats for module: Qt6Gui
Adding Qt6Pdf for qpdfd.dll from plugin type: imageformats
Adding in plugin type networkinformation for module: Qt6Network
Adding in plugin type platforminputcontexts for module: Qt6Gui
Skipping plugin qtvirtualkeyboardplugind.dll due to disabled dependencies (Qt6Qml Qt6Quick).
Adding in plugin type platforms for module: Qt6Gui
Adding in plugin type styles for module: Qt6Widgets
Adding in plugin type tls for module: Qt6Network
Direct dependencies: Qt6Core Qt6Gui Qt6Widgets
All dependencies   : Qt6Core Qt6Gui Qt6Widgets
To be deployed     : Qt6Core Qt6Gui Qt6Network Qt6Pdf Qt6Svg Qt6Widgets
Updating Qt6Cored.dll.
Updating Qt6Guid.dll.
.........
Creating qt_zh_CN.qm...
Creating qt_zh_TW.qm...
-- Installing: D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/install/bin/helloworld.exe
12:36:03: The process "C:\Program Files\CMake\bin\cmake.exe" exited normally.
12:36:03: Elapsed time: 00:03.

在资源管理器中打开 D:/workspace/qt/helloworld/build/Desktop_Qt_6_7_3_MSVC2019_64bit-Debug/install/bin目录, 运行 hello world.exe, 此时程序可以正常运行.

到此这篇关于Qt Creator + CMake 构建教程的方法步骤的文章就介绍到这了,更多相关Qt Creator CMake 构建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • c++中struct使用注意事项

    c++中struct使用注意事项

    本文通过2个小示例给大家展示了一下c++中struct使用的注意事项,希望对大家学习C++能够有所帮助。
    2016-01-01
  • C++中 ‘=default ’及‘ =delete ’的使用

    C++中 ‘=default ’及‘ =delete ’的使用

    这篇文章主要介绍了C++中 =default 及 =delete 使用,使用=default和=delete可以控制编译器默认函数体的使用,下面我们就来看看具体的室友方法吧,需要的朋友也可以参考一下
    2021-12-12
  • 浮点数乘法和整形乘除法的效率经验比较

    浮点数乘法和整形乘除法的效率经验比较

    这篇文章主要为大家介绍了浮点数乘法和整形乘除法的效率经验比较,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • C++ vector的常见用法超详细讲解

    C++ vector的常见用法超详细讲解

    这篇文章主要介绍了C++ vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • c++ String去除头尾空格的方法

    c++ String去除头尾空格的方法

    这篇文章主要介绍了c++ String去除头尾空格的方法,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C++中的delete不会将操作数置0

    C++中的delete不会将操作数置0

    这篇文章主要介绍了C++中的delete不会将操作数置0的相关资料,需要的朋友可以参考下
    2016-05-05
  • C++实现动态绑定代码分享

    C++实现动态绑定代码分享

    对于C++动态绑定的理解,就是编译器用静态分析的方法加上虚拟函数的设计实现在程序运行时动态智能执行正确虚拟函数的技术。要彻底理解动态绑定,只需要掌握两点,一是编译器的静态编译过程,二是虚拟函数的基本知识。只要有了这两点理解,任何动态绑定的分析都是很容易的
    2015-11-11
  • C语言如何建立动态链表问题

    C语言如何建立动态链表问题

    这篇文章主要介绍了C语言如何建立动态链表问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • C语言 MD5的源码实例详解

    C语言 MD5的源码实例详解

    这篇文章主要介绍了C语言 MD5的源码实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • Vue自定义指令最佳实践教程分享

    Vue自定义指令最佳实践教程分享

    Vue 3 显著增强了自定义指令的功能,使其封装更加灵活和易用,本文将分为基础和进阶两部分,介绍如何实现常用的自定义指令,并提供最佳的项目组织方式,需要的朋友可以参考下
    2024-12-12

最新评论