Qt Creator + CMake 构建教程

此教程基于:

  • Qt 6.7.4
  • Qt Creator 15.0.1
  • CMake 3.26.4

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

目录

  • 新建窗体工程
  • 更新翻译
  • 添加资源
  • 软件部署(Deploy)

此教程描述了如何一步步在 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 按钮, 重新构建. 从编译输出窗口中, 可以看到程序的构建过程为:
    1. 更新 helloworld_zh_CN.ts;
    2. 生成 helloworld_zh_CN.qm;
    3. 链接生成 helloworld.exe.

在这里插入图片描述- 点击 Run按钮运行此程序, 可以看到主窗体的标题栏已经显示为中文.

在这里插入图片描述

添加资源

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

  • 使用资源管理器打开工程所在目录, 新建名为 images 的文件夹, 并将图标logo.png放置到此文件夹下.
  • CMakeLists.txt 文件中添加:
 # qt_add_resources(<TARGET> <RESOURCE_NAME> [PREFIX <PATH>] [FILES ...])qt_add_resources(helloworld imageresourcesPREFIX "/"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 helloworldOUTPUT_SCRIPT deploy_scriptNO_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, 此时程序可以正常运行.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24713.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

锂电池保护板测试仪:电池安全的守护者与创新驱动力

在新能源产业蓬勃发展的今天&#xff0c;锂电池以其高能量密度、长循环寿命和环保特性&#xff0c;成为电动汽车、无人机、便携式电子设备等领域不可或缺的能量来源。然而&#xff0c;锂电池的安全性和稳定性一直是行业关注的焦点。为了确保锂电池在各种应用场景下的可靠运行&a…

岳阳市美术馆预约平台(小程序论文源码调试讲解)

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专…

【Java】I/O 流篇 —— 转换流与序列化流

目录 转换流原理InputStreamReader 转换输入流构造方法代码示例 OutputStreamWriter 转换输出流构造方法代码示例 练习 序列化流序列化流反序列化流**serialVersionUID**基本概念作用使用方式transient 关键字注意事项 转换流 原理 转换流属于字符流&#xff0c;是字符流和字节…

Mac 版 本地部署deepseek ➕ RAGflow 知识库搭建流程分享(附问题解决方法)

安装&#xff1a; 1、首先按照此视频的流程一步一步进行安装&#xff1a;(macos版&#xff09;ragflowdeepseek 私域知识库搭建流程分享_哔哩哔哩_bilibili 2、RAGflow 官网文档指南&#xff1a;https://ragflow.io 3、RAGflow 下载地址&#xff1a;https://github.com/infi…

计算机三级网络技术备考

#subtotal 1Mbps1024kb128KB12.8M/s #1024B1KB 1024KB1MB 1024MB1GB #路由器的5G信号和平常的波长不同&#xff08;5G的穿墙性能差&#xff09; #局域网LAN&#xff08;一公里内——构成集线机、交换机、同轴电缆&#xff09; #城域网MAN&#xff08;几公里到几十公里——光…

IDEA 2024.1 最新永久可用(亲测有效)

今年idea发布了2024.1版本&#xff0c;这个版本带来了一系列令人兴奋的新功能和改进。最引人注目的是集成了更先进的 AI 助手&#xff0c;它现在能够提供更复杂的代码辅助功能&#xff0c;如代码自动补全、智能代码审查等&#xff0c;极大地提升了开发效率。此外&#xff0c;用…

30 分钟从零开始入门 CSS

前言 最近也是在复习&#xff0c;把之前没写的博客补起来&#xff0c;之前给大家介绍了 html&#xff0c;现在是 CSS 咯。 30分钟从零开始入门拿下 HTML_html教程-CSDN博客 一、CSS简介&#xff1a;给网页“化妆”的神器 CSS&#xff08;层叠样式表&#xff09;就像“化妆“&a…

Game Maker 0.11更新:构建社交竞速游戏并增强玩家互动

在这三部分系列中&#xff0c;我们将介绍如何实现Game Maker 0.11中一些最激动人心的新功能。 欢迎来到我们系列文章的第一篇&#xff0c;重点介绍了The Sandbox Game Maker 0.11更新中的新特性。 The Sandbox Game Maker 0.11是一个多功能工具&#xff0c;帮助创作者通过游戏…

软件供应链安全工具链研究系列——RASP自适应威胁免疫平台(上篇)

1.1 基本能力 RASP是一种安全防护技术&#xff0c;运行在程序执行期间&#xff0c;使程序能够自我监控和识别有害的输入和行为。也就是说一个程序如果注入或者引入了RASP技术&#xff0c;那么RASP就和这个程序融为一体&#xff0c;使应用程序具备了自我防护的能力&#xff0c;…

2024信息技术、信息安全、网络安全、数据安全等国家标准合集共125份。

2024信息技术、信息安全、网络安全、数据安全等国家标准合集&#xff0c;共125份。 一、2024信息技术标准&#xff08;54份&#xff09; GB_T 17966-2024 信息技术 微处理器系统 浮点运算.pdf GB_T 17969.8-2024 信息技术 对象标识符登记机构操作规程 第8部分&#xff1a;通用…

HTTP与网络安全

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、HTTPS和HTTP有怎样的区别呢&#xff1f;HTTPS HTTP SSL/TLS&#xff08;SSL或者TLS&#xff09; HTTP&#xff1a;应用层 SSL/TLS&#xff1a;协议中间层 …

ASP.NET Core 8.0学习笔记(二十八)——EFCore反向工程

一、什么是反向工程 1.原则&#xff1a;DBFirst 2.反向工程&#xff1a;根据数据库表来反向生成实体类 3.生成命令&#xff1a;Scaffold-DbContext ‘连接字符串’ 字符串示例&#xff1a; Server.;DatabaseDemo1;Trusted_Connectiontrue; MultipleActiveResultSets true;Tru…

Unity基础——资源导出分享为Unity Package

一.选中要打包的文件夹&#xff0c;右击&#xff0c;点击Exporting package 二.勾选 Include Dependencies&#xff0c;点击Export Include Dependencies&#xff1a;代表是否包含资源依赖的选项 三.选择保存的位置&#xff0c;即可生成Unity package 最终形成文件&#xff1a…

kafka-leader -1问题解决

一. 问题&#xff1a; 在 Kafka 中&#xff0c;leader -1 通常表示分区的领导者副本尚未被选举出来&#xff0c;或者在获取领导者信息时出现了问题。以下是可能导致出现 kafka leader -1 的一些常见原因及相关分析&#xff1a; 1. 副本同步问题&#xff1a; 在 Kafka 集群中&…

【Java企业生态系统的演进】从单体J2EE到云原生微服务

Java企业生态系统的演进&#xff1a;从单体J2EE到云原生微服务 目录标题 Java企业生态系统的演进&#xff1a;从单体J2EE到云原生微服务摘要1. 引言2. 整体框架演进&#xff1a;从原始Java到Spring Cloud2.1 原始Java阶段&#xff08;1995-1999&#xff09;2.2 J2EE阶段&#x…

内容中台的企业CMS架构是什么?

企业CMS模块化架构 现代企业内容管理系统的核心在于模块化架构设计&#xff0c;通过解耦内容生产、存储、发布等环节构建灵活的技术栈。动态/静态发布引擎整合技术使系统既能处理实时更新的产品文档&#xff0c;也能生成高并发的营销落地页&#xff0c;配合版本控制机制确保内…

Binder通信协议

目录 一,整体架构 二,Binder通信协议 三&#xff0c;binder驱动返回协议 四&#xff0c;请求binder驱动协议 一,整体架构 二,Binder通信协议 三&#xff0c;binder驱动返回协议 binder_driver_return_protocol共包含18个命令&#xff0c;分别是&#xff1a; 四&#xff0c…

react 中,使用antd layout布局中的sider 做sider的展开和收起功能

一 话不多说&#xff0c;先展示效果&#xff1a; 展开时&#xff1a; 收起时&#xff1a; 二、实现代码如下 react 文件 import React, {useState} from react; import {Layout} from antd; import styles from "./index.module.less"; // 这个是样式文件&#…

神经网络 - 激活函数(Sigmoid 型函数)

激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力&#xff0c;激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单&#xff0…

供应链管理系统--升鲜宝门店收银系统功能解析,登录、主界面、会员 UI 设计图(一)

供应链管理系统--升鲜宝门店收银系统功能解析&#xff0c;登录、主界面 会员 UI 设计图&#xff08;一&#xff09;