当前位置: 首页 > web >正文

使用VS2022开发并部署QT应用

QT Creator默认使用minGW编译QT应用,但是在windows平台上,minGW编译后用QT官方工具(windeployqt )部署,然后移植到没有安装QT运行时的环境中运行,大概率会出现找不到动态链接库或者无法定位链接库入口之类的问题,兼容性不好,因此,选择用MSVC编译并部署QT应用,在windows平台可能是一个更好的选择。

1、相关工具的安装与配置

要使用MSVC编译QT应用,必须先安装与QT版本对应的VS版本。QT6.9支持的VS版本为VS2022。安装完VS2022后,需要进行一些配置。

1.1、VS2022文件编码配置

VS2022默认使用操作系统编码页(中文windows使用936(GBK)),而QT框架的程序源代码最好使用65001(UTF-8无BOM),如果不变更VS2022的默认编码,不但源代码中的中文字符会变成乱码,编译也会失败。处理好VS2022环境编码问题推荐执行以下操作:

1.1.1、修改VS2022环境中文档的默认编码:

这一步修改会使VS2022中创建的新文件会以UTF-8编码保存,打开编码不明的文件时优先以UTF-8编码解析。

1.1.2、创建项目时,可以在项目根目录下创建一个文件名为“.editorconfig”的文件,在其中对编辑器编码等作出规定:

# 明确所在目录是项目根目录,这样编辑器不会向父目录继续寻找.editorconfig 
root = true # 以下规则对于所有文件生效,注意中括号不能省
[*]# 缩进风格,以下两条规则也可以直接用indent_size = 4代替
indent_style = tab # 缩进宽度
tab_width = 4 # 文件编码格式,指定文件编码格式
charset = utf-8# 行尾格式,Windows一般为CRLF,Linux一般为LF,根据需要更改
end_of_line = crlf # 文件结尾添加换行符,以防警告
insert_final_newline = true 

1.1.3、如果编译链接过程中仍然发生编码方面的错误,可以右键点击项目名称,点击“属性”命令打开项目属性页,增加附加选项“/utf-8”,如下图:

1.2、安装QT VS Tools

1.3、安装QT MSVC工具链

打开Qt Maintenance Tool(Qt维护工具)

查看是否安装了MSVC工具链,没有的话勾选并安装:

1.4、配置QT MSVC工具链路径

上一步安装的MSVC工具链路径一般为“path/to/qtroot/version/msvc2022_64”,通过VS2022工具->选项打开选项对话框,在Qt->versions配置项中添加相关路径,并在系统环境变量中将“path/to/qtroot/version/msvc2022_64/bin”加入PATH环境变量。

2、创建项目与编码

在VS2022中创建QT项目,如果是GUI程序,可以搜索并选择“Qt Widgets Application”模板作为项目模板。

项目的编码可以在VS2022中进行,也可以在Qt Creator中进行(它的窗体设计器比较方便)。如果在Qt Creator中编码,完成后将有关文件添加进VS2022的项目中即可。

在项目开发过程中如果要观察qDebug()输出的调试信息,可以临时将链接系统的子系统指定为控制台:

在开发完成后正式编译连接时再改回“窗口 (/SUBSYSTEM:WINDOWS)”。如果子系统仍然指定为“控制台 (/SUBSYSTEM:CONSOLE)”,生成的程序运行时除了显示程序窗体外,还将显示一个控制台窗口。

3、编译

如果要用编译后的结果进行部署,采用Release(发布)配置进行文件的编译。编译过程中如果因为环境变量未正确配置导致找不到include文件与链接库引起编译失败,可以在项目属性页将相关目录添加进项目:

4、部署

上一步编译所得的exe文件离开开发环境并不能独立运行,要使它能够独立运行尚需进行部署。安装完QT Creator的MSVC工具链后,QT官方的适用于MSVC编译器的部署工具就已安装,路径为1.4中要求加入PATH环境变量的“path/to/qtroot/version/msvc2022_64/bin”,文件名为“windeployqt.exe”和“windeployqt6.exe”,顾名思义,后者为支持QT6.*的部署工具。在任意位置创建一个文件夹作为部署文件夹(不要使用其中已包含文件的文件夹,可以使用已有的空文件夹),将编译出的Release版exe文件拷贝到这个文件夹中,以管理员方式打开终端,导航到此目录下,执行如下命令:

windeployqt6 --release --compiler-runtime application_name.exe 

其中,application_name.exe是编译所得的应用程序文件名。这个命令执行完成,部署也就完成了。我用相同的程序代码实测,minGW的部署版本(要用QT Creator默认的minGW工具编译,也要用minGW目录下的windeployqt6部署)拷贝到没有安装QT的windows系统中执行失败,使用MSVC工具链制作的部署版本则运行成功。

http://www.xdnf.cn/news/2969.html

相关文章:

  • Karmada 多 Kubernetes集群管理实战
  • 如何查看和验证AWS CloudFront的托管区域ID
  • unity在编辑器模式调试音频卡顿电流声
  • 什么是向量库和数据向量化?建设向量库有什么作用?
  • vue.js中的一些事件修饰符【前端】
  • Pytest中的fixture装饰器详解
  • OpenCV 图形API(72)图像与通道拼接函数-----根据指定的方式翻转图像(GMat)函数 flip()
  • 布局元素组件 (Layout Element)
  • 功放IC搭配的升压芯片选型指南:为何FP5207更适合高保真功放系统?
  • 基于大模型的大肠息肉全程管理研究报告
  • 东土科技NewPre系列智能控制器的创新之旅
  • 第17节:传统分类模型-随机森林与决策树
  • 【Prometheus-Mongodb Exporter安装配置指南,开机自启】
  • 【安全扫描器原理】ICMP扫描
  • Docker基础(安装和命令)
  • 第三节:用户和用户组管理
  • 测试——BUG篇
  • python类中的 __contains__方法是什么?
  • unity Orbbec Femto Bolt接入unity流程记录 AzureKinectExamples 插件 使用记录
  • oracle 批量查询每张表的数据量
  • RoPE 相对位置编码 VS 传统位置编码
  • neo4j vs python
  • Canal使用
  • 巧记英语四级单词 Unit7-上【晓艳老师版】
  • 【应用密码学】实验三 流密码(ZUC)
  • 智能电子白板的设计与实现:从硬件选型到软件编程
  • 【ArcGIS微课1000例】0143:什么是ovkml,如何转换为kml与shp?
  • 使用 OpenCV 实现图像中心旋转
  • SpringBoot获取用户信息常见问题(密码屏蔽、驼峰命名和下划线命名的自动转换)
  • Spring Cloud 项目中优雅地传递用户信息:基于 Gateway + ThreadLocal 的用户上下文方案