Qt+第三方库开发遇到的坑---kalrry

news2024/11/16 19:34:50

Qt依赖UG库开发遇到的坑---kalrry

  • 一、依赖引入坑
  • 二、Qt在Debug时报错
    • 1、编译器是 **MSVC** 还是 **MinGW**
    • 2、编译器 32位 还是 64位
  • 三、Qt+MSVC编译后中文乱码
  • 四、不能将const char*类型的值分配到const* 类型的实体
  • 五、debug编译后再发布程序无法运行
  • 六、Qt 环境配置提示警告
    • 警告一、
    • 警告二、
  • 七、Qt5初次导入msvc2017_64编译器遇到的问题记录
  • 八、Qt通过Debug编译后再发布,程序报错

一、依赖引入坑

.pro文件中增加引入


//$$quote()坑
//这里的$$quote()是当路径中有空格时候用此方式引入,没有空格可直接引用
//简单理解,当路径有空格需用$$quote方式引用,不然Qt无法识别
INCLUDEPATH += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN)      //必须引入
INCLUDEPATH += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPENPP)    //视情况而定

//凡是程序需要的即使在UGOPEN里包含,也必须用LIBS引入详细lib库名称,否则会报错
LIBS += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN\libufun.lib) 
LIBS += $$quote(D:\ProgramFiles\UG\NX 10.0\UGOPEN\libufun_cae.lib)
LIBS += ......
//UGOPEN文件下有多个lib静态库不知道的情况下最好全引入,如果知道引用的具体名字,可按需引入

二、Qt在Debug时报错

1、编译器是 MSVC 还是 MinGW

在这里插入图片描述

遇到上述问题,其实是编译器问题,因为 MSVCMinGW 编译出来的库文件存在兼容性问题,当你的项目使用 MinGW 编译的使用,想要用一个 MSVC 编译生成的库时就会出现如上报错。
该错误说后面这一串东西没定义,但我们按住 Ctrl 点进去发现可以正常链接到,所以并不是我们引用问题。
原因是 UG 的库文件都来自 MSVC 编译的,所以 QtDebug 时候的编译器要配置成 MSVC 才可以正常识别。

Qt配置MSVC传送门

2、编译器 32位 还是 64位

在这里插入图片描述

MSVC 32位 报错就换 MSVC 64位,反之

Qt配置MSVC传送门

三、Qt+MSVC编译后中文乱码

在Qt头文件中添加如下代码即可解决
该代码仅支持VS环境
但我们发现在QT中也管用,原因可能就是我们最终是Qt+msvc编译的,可能间接性属于vs环境


#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")// 该指令仅支持VS环境(但在QT中不知道为什么还管用)
#endif

四、不能将const char类型的值分配到const 类型的实体

用MSVC编译时候遇到如上问题

 	char* Height = "100";       //报错
 	
    char* Diam = (char*)"100";  //用(char*)强制转换后可用,虽然还有警告

五、debug编译后再发布程序无法运行

报如下错误
在这里插入图片描述

解决办法:
用release模式编译后发布,居然不报错了,虽然很蒙,但是能跑就行
在这里插入图片描述

六、Qt 环境配置提示警告

警告一、

Qt 环境配置提示警告Qt Cmake configuration has no path to a C++ compiler set, even though the toolkit has a v
进入Qt->工具->选项->Kits->构建套件(Kit)窗口后
在这里插入图片描述
发现黄色警告
请添加图片描述
Qt Cmake configuration has no path to a C++ compiler set, even though the toolkit has a valid tool chain
Qt Cmake配置没有到c++编译器集的路径,即使工具箱有一个有效的工具链

解决方案:

进入vs安装目录 我这里是 D:\Program Files\Microsoft Visual Studio\Common7\Tools
运行下面目录下的 vsvars32.bat 脚本,2017以后版本执行 VsDevCmd.bat 脚本即可
进一步解释:
VsDevCmd.bat 设置 Visual Studio 相关的环境变量,这些变量是编译、链接和构建命令行上的应用程序所必需的。
vs2017之后使用的都是VsDevCmd.bat
vs2015及以前使用的是vsvars32.bat

此时会发现C++解决了,还有C报错,Qt Cmake configuration has no path to a C compiler set, even though the toolkit has a valid tool chain

解决方案:重启电脑一般就可解决,即使不重启c报错,也可以运行程序;

QT5+VS2019 构建套件(Kit)黄色感叹号问题解决
参考1
参考2

警告二、

MSVC编译器版本不同,只需要改成相同版本即可
例如vs是2019,qt是2017,默认情况下会报警告版本不同,此时需要同时将编译器设置为2017

七、Qt5初次导入msvc2017_64编译器遇到的问题记录

Qt 5设置 MSVC编译器
参考1
不知道 Windows Software Development Kit 在哪的看下面
参考2

八、Qt通过Debug编译后再发布,程序报错

Qt通过Debug编译后调试正常但是发布后,程序运行不起来,并报如下错误
在这里插入图片描述
此时我们可以尝试用release模式编译后再发布,不出其它意外,应该可以正常运行了(大部分情况是用了MSVC编译环境导致的,也就是结合vs的MSVC编译时用release发布,其它Mingw一般debug后发布就可以,具体原因未深入了解,有大佬看到望补充)

Qt:项目发布Debug和Release版的区别:

  1. Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息
  2. Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。Release模式下生成一个文件.exe或.dll文件
  3. 正常流程理论上是Debug->Release->发布

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring @Transactional注解事务六大失效场景

Transactional事务失效场景1:注解在非public修饰的方法上。 原因:Spring强制的要求。 代码示例: Transactionalprivate void createOrder(){} Transactional事务失效场景2:注解在被final关键字修饰的方法上。 原因:Spr…

推荐一款好用的设备维护管理系统,你用过了吗

设备维护管理系统层出不穷,找到一款好用的适配的,也要花费大量的时间去挑选! 对于企业来说,一个好的设备管理系统应该能够: 1. 适应企业高度场景化的设备管理工作,覆盖设备的采购、常规检查、养护、添装、…

“三刷”牛客网844道Java题目,易错知识点总结,带你清扫Java基础面试障碍

目录 前言 1、子类通过哪些办法,可以调用继承自父类的方法? 2、volatile、Lock、transient 哪个关键字不能用来处理线程安全 3、Hashtable 和 HashMap 的区别是?(容易忽略的两点) 4、如何声明了一个适合于创建50个字…

flask框架实现文件下载接口

方式一: app.route("/download1") def download():# return send_file(test.exe, as_attachmentTrue)return send_file(2.jpg)# return send_file(1.mp3)如果不加as_attachment参数,则会向浏览器发送文件,比如发送一张图片&#x…

Revit技巧:快速隔离一个小构件,拉伸屋顶转折处连接

一、Revit中如何快速单独隔离一个小构件 今天跟大家分享的是一个快速隔离的小技巧,你可以理解为快速用剖面框拉成你需要的构件区域。我就举个例子让大家简单容易理解,如图1所示,假设我只需要编辑那个墙的装饰,但又需要用剖面框&am…

704二分查找法--搜索区间

二分查找法–搜索区间的深入理解 二分查找法是算法学习中很基础的算法&#xff0c;但是其也是很重要的算法&#xff0c;将二分查找法搞明白对后续算法的学习有着事半功倍的作用。 本体难点&#xff1a;二分搜索区间的判断 搜索区间 [left,right] int search(vector<int>…

026_SS_MoFusion A Framework for Denoising-Diffusion-based Motion Synthesis

MoFusion: A Framework for Denoising-Diffusion-based Motion Synthesis 本文提出了一种利用diffusion生成人体motion的方法。这种方法可以将音频和文本作为条件。 损失函数 对于diffusion的损失中&#xff0c;加入了运动损失。 其中第一项 LdaL_{da}Lda​ 是原始的diffusio…

微信公众号如何接入ChatGPT机器人

不难&#xff0c;代码总共也就25行&#xff0c;大致逻辑如下。 总共分为是下面两步 文章目录在云服务器上部署自定义消息处理服务微信公众号配置自己的消息处理服务器在云服务器上部署自定义消息处理服务 这里需要我们自定义来处理用户发送过来的消息 首先导入werobot&#x…

Linux操作系统实验2——进程描述

实验要求&#xff1a; 1.查看task_struct的结构&#xff0c;找到其中的pid&#xff0c;state&#xff0c;prio&#xff0c;parent pid字段 2.在task_struct结构中找到vma相关字段&#xff0c;vm_start,vm_end,vm_next 3.打印指定pid的基本信息&#xff0c;包括基本信息及VMA内存…

分组卷积与dw卷积

分组卷积&#xff08;Group Convolution&#xff09; 分组卷积在ResNext中用到了 首先必须明确&#xff1a; 常规卷积&#xff08;Convolution&#xff09;的参数量是&#xff1a; K*K*C_in*n K是卷积核大小&#xff0c;C_in是input的channel数&#xff0c;n是卷积核个数(outp…

共享模型之管程(一)

1.共享带来的问题 1.1.线程安全问题 例如: 两个线程对初始值为0的静态变量一个做自增,一个做自减,各做5000次,结果是0吗? Slf4j public class TestThread {//静态共享变量static int counter 0;public static void main(String[] args) throws InterruptedException {Threa…

【Axure教程】拖动排序——扣款顺序

随着移动支付的发展&#xff0c;移动支付的途径和方式也越来越多&#xff0c;常见的有钱包余额支付、支付宝支付、微信支付、银行卡支付……随着绑定的账户越来越多&#xff0c;我们需要一个设置扣款顺序的功能页面。 所以今天作者就教大家如果做一个拖动排序的扣款顺序的原型…

机器学习的4种经典模型总结

机器学习&#xff08;Machine Learning&#xff09;是人工智能的一个分支&#xff0c;也是人工智能的一种实现方法。机器学习的核心是“使用算法解析数据&#xff0c;从中学习&#xff0c;然后对新数据做出决定或预测”&#xff0c;机器学习的概念就是通过输入海量训练数据对模…

【财务】FMS财务管理系统---质保金与预付款

在FMS财务管理系统中&#xff0c;如何对质保金和预付款进行管理&#xff0c;笔者做了详细的业务流程拆解。 上一篇主要说了财务应收管理&#xff0c;有一些朋友留言提出了很多建议&#xff0c;在这里必须谢谢。 关于应收分为ToC与ToB两部分&#xff0c;每一部分都与前端业务系…

新一代自动出价范式:在线强化学习SORL框架

丨目录&#xff1a; 摘要 动机&#xff1a;在离线不一致问题 问题建模 方法&#xff1a;SORL框架 实验结果 总结 关于我们 参考文献▐ 摘要近年来&#xff0c;自动出价已成为广告主提升投放效果的重要方式&#xff0c;在真实广告系统&#xff08;RAS&#xff09;中&#xff0c;…

C++ 数学与算法系列之高斯消元法求解线性方程组

1. 前言 什么是消元法&#xff1f; 消元法是指将多个方程式组成的方程组中的若干个变量通过有限次地变换&#xff0c;消去方程式中的变量&#xff0c;通过简化方程式&#xff0c;从而获取结果的一种解题方法。 消元法主要有代入消元法、加减消元法、整体消元法、换元消元法、…

【C/C++ SOCKET编程】实现服务器客户端的简单通信

什么是SOCKET Socket又称"套接字"&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求&#xff0c;使主机间或者一台计算机上的进程间可以通讯。 TCP/IP协议 从字面意义上讲&#xff0c;有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议…

Hive环境安装搭建

目录 Hive安装 MySQL安装 配置Hive元数据库到MySQL Hive安装 软件包 0积分免费下载&#xff1a; hive环境安装所需软件包-Hive文档类资源-CSDN下载 将软件包拖进虚拟机中 将jar包解压到目录 给目录文件夹名改为hive 配置环境变量 输入命令&#xff1a; vim /etc/profile …

数据滚动大屏:Stimulsoft Dashboards.WIN 2023.1.2

Stimulsoft Dashboards.WIN 是一组组件&#xff0c;您可以使用这些组件将分析添加到您的应用程序中。WinForms 和 WPF 的仪表板 Stimulsoft Dashboards.WIN 是一个功能齐全的工具&#xff0c;用于在仪表板上转换、分析、分组、过滤、排序和显示数据。它与 .NET Framework 4.5 及…

科创板智能家居第一股,萤石网络昨日上市

2022年12月28日&#xff0c;杭州萤石网络股份有限公司(以下简称“萤石网络”)成功登陆上海证券交易所科创板&#xff0c;证券代码为688475。值得一提的是&#xff0c;萤石网络是登陆科创板的第500家企业。 在上市仪式上&#xff0c;萤石网络董事长、总经理蒋海青表示&#xff0…