IDE/在VS2015中集成Qt开发环境

news2025/1/21 0:54:05

文章目录

  • 概述
  • 安装VS2015
  • 安装Qt VS Tools 插件
  • Qt相关配置应用到所有项目
    • 配置增加
    • 配置删除
  • VS项目属性下Qt工程配置(Qt Project Settings)
    • Qt Versions
    • Qt Modules
    • 编辑器找不到Qt的类
  • QtDesigner在VS下使用
    • 无法打开UI/打开失败
    • 找不到UI编译中间文件
    • UI添加的新控件在VS中不识别
  • 常见编译错误
    • LNK2019
    • Qt installation 错误
    • 未定义的标识符 "QWidget/QLabel..."
    • LNK1181 无法打开输入文件

概述

考虑到A项目后期要将相关功能库用C#做外壳封装,也因为使用VS相比QtCreator有更强大的调试能力,决定使用VS2015+Qt5.12作为近期项目的集成开发环境。总结了最近3个月内遇到的一些IDE联合使用的问题。关于VS项目属性页中与Qt无直接关联的配置项,此文基本不涉及。

安装VS2015

略,请参照其他相关文档。

安装Qt VS Tools 插件

有两种方案。
方案1是从Qt官网下载 相关的插件,如qt-vs-addin-msvc2015-2.0.0-beta. vsix ,然后直接双击安装即可(在VS工具-扩展和更新中,并未找到安装离线插件的选项)。
方案2是直接在VS中进行插件扩展(菜单 - 工具 - 扩展和更新 - 搜索Qt),搜索到插件后在线安装。
相比较之下,方案2是以VS为主线的,它自动提供的插件版本,应该是与Qt对应版本提供的插件版本存在区别的。如果安装环境可以直接联网,建议方案2。

Qt相关配置应用到所有项目

通常的,在项目 - 属性中进行的配置只能对当前项目生效,按照如下方案可对所有项目生效(同样,在取消时,可按照单个项目进行取消,或对所有项目进行取消)。需要首先打开VS属性管理器(视图-其他窗口-属性管理器),后续步骤参照下文。

配置增加

在左侧切换到属性管理器中,如下图选择 Microsoft.Cpp.x64.user 然后右键 --> 选择属性 --> 配置方式与对单独项目进行配置是一样的。
在这里插入图片描述
注意:上图中蓝色选中处的配置,是错误的,不可借鉴。

配置删除

务必注意,通过Microsoft.Cpp.x64.user进行的所有项目参数配置,在单独项目配置时,是只读的,并不能进行修改。比如,上图中,我在探索阶段,错误的配置增加了 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib 目录,当进行具体的项目设置时,想在同样的位置将它删除,是办不到的。

VS项目属性下Qt工程配置(Qt Project Settings)

Qt Versions

… 参见 Qt installation 错误 小节…

Qt Modules

在这里插入图片描述
参见,下文常见编译错误。所有用到的Qt模块都要包含进去,否则,相关模块的类接口将在编译时,报错找不到。在高版本的插件中是可以通过勾选操作实现此条目的编辑的。Qt的模块名字去除Qt字符并小写化,便是此处应该添加的字符串。包括:core;gui;widgets;xml;serialport;network…
有时候,即使你正确添加了模块名称,VS编辑器依然在相关类上提示红色波浪线,此时你可以重新扫描解决方案,必要时重启VS软件。另外,注意Debug和Release都要配置哦。

编辑器找不到Qt的类

问题现象大约是这样的,搞个简单的Demo可以编译成功,但是编辑器中显示Qt的全部类都是不识别的符号,注意这里是编辑器不是编译器。
一般情况下,遇到此类问题,只需要在VS资源管理树的项目名称上,右键,然后执行 “重新扫描解决方案” 即可。若不行,可以尝试重新启动VS软件,再次重新扫描解决方案,如果还是不行,可以看看后边的这些记录。
可以还有两种方案可以解决此问题:
方案1:
在项目属性 -> VC++目录 -> 包含目录中,添加D:\Qt\Qt5.12.8\5.12.8\msvc2015_64\include路径
方案2
在项目属性 -> Qt Project Setting -> Paths -> 头文件搜索路径 选项下,编辑-并插入 Qt_INCLUDEPAT宏,效果如下图。
请添加图片描述
后来,偶然发现:
在项目属性-> C/C++ -> [附加包含目录] 选项中,已经包含了$(Qt_INCLUDEPATH_); 通过查看同事的开发环境,这个配置应该是在进行Qt Project Setttings 附加目录,就已经默认自己存在了,只是,只是,没有编辑器起作用,但是我猜测,之所以编辑器告警,编译器不告警,其根本原因就是这个C/C++ -> [附加包含目录] 中的 $(Qt_INCLUDEPATH_); 对编译器起作用,对编辑器不起作用,我也是醉了!!
还有更加奇怪的(没有再详细测试)
当同事想在 项目属性 Qt Project Setttings -> Additional Qt Header search paths 中增加 $(Qt_INCLUDEPATH_) ;时,却发现他的宏列表中根本就没有这个选项。诡异的是,我的宏列表里也找不到它了,我昨天刚刚从宏列表里将它添加进去的啊! 我在编辑界面,将左侧的 $(Qt_INCLUDEPATH_) 删除保存,然后重新打开,还是找不到啦…
好在经过同事验证,在Additional Qt Header search paths中,手动的将 $(Qt_INCLUDEPATH_) 写入,对编译器也是生效的…
再次遇见奇怪的事情(20221012)
今天首次编译Release版本,准备发布出来测试用。在编译release版本时,先是遇到了Qt Project Setttings -> Qt Modules 配置中缺失 gui;widgets 模块导致的编译错误,轻松解决;之后又发现了编辑器红色波浪线提示,找不到任何的Qt类类型,可是,可是,Additional Qt Header search paths 已经正确配置了啊…
我删除了Qt相关的编译中间文件,重新编译,重新打开代码文件,这个问题就消失了,再不行,亲可尝试重新打开VS试试,或者试试资源树上的重新扫描解决方案…
20230203 工作过程需要,将代码重新从git上clone份,打开新目录下的工程A和B进行编译:再次遇到了编辑器告警Qt类不识别(红色下划线标记)的问题,编译结果无误,Qt Project Setttings配置正确。起初尝试重新编译无效,关闭工程重新打开无效。后来,对工程A进行了一次 “重新扫描解决方案”,暂无效,在此基础上再次关闭VS后重新打开工程A,不识别的问题便不存在啦。打开B工程(未执行重新扫描解决方案),发现其也不再有Qt类不识别的编辑器告警。

QtDesigner在VS下使用

首先,QtDesigner在VS下的使用,相比其在QtCreator下的使用,在功能上是有所阉割的,不要指望像在原生态下的那种好用。

无法打开UI/打开失败

ui文件无法打开,或者打开后闪退,或者是打开后报错(如:未完成的操作、未指定的错误;未将对象应用设置到对象的实例…)。
常用解决方案:
选中一个UI文件,右键 - 打开方式 - 添加 - 选中Qt安装目录下(D:\Qt\Qt5.12.8\5.12.8*msvc2015_64*\bin\)designer.exe 文件,并重新命名,且设置为默认值。

找不到UI编译中间文件

无论如何,首先要先进行一次编译,以使得绘制的UI文件,经过moc编译,生成ui_xxx.h中间文件。默认的存储路径为 …\x64\Debug\uic
这个中间文件的目标路径,应该是可以修改的,且此文件夹路径,应该是要配置到include路径下的。

UI添加的新控件在VS中不识别

如果安装了小番茄,在其设置 Enhanced Listboxes -> Source of C/C++ content: 选择 Default Intellisense,若选择visual assist是识别不到的,详细原因未知。
使用QtDesigner设计师编辑完了UI文件,并确定执行了保存操作,执行了编译过程,查看对应的ui_xxx.h文件,也没有问题,但是在引用ui_xxx.h头文件的VS代码文件中,愣是说找不到新加入的控件!解决方案如下:

  1. 先在ui编辑页面保存新的ui界面 。
  2. 在资源管理树,右键点击ui文件,然后选择编译
  3. 在资源管理树,选中项目,右键,然后选择重新扫描解决方案。

常见编译错误

LNK2019

错误 LNK2019 无法解析的外部符号 “public: void __cdecl CPublishProxy4Qt::SignalProcessToQtObserver(void *,void *,unsigned char *,unsigned int)” (?SignalProcessToQtObserver@CPublishProxy4Qt@@QEAAXPEAX0PEAEI@Z),该符号在函数 “xxx” 中被引用…

使用了信号槽,但却没有在类定义中增加 Q_OBJECT 宏定义,脱离了QtCreator后,更容易忘记啦,而且VS的报错并不明确。

Qt installation 错误

Qt VS Tools -> Qt Versions -> 其中设置的Version名称 (如下图的5.12.8 和 5.12.8_msvc2015_64)会在vs的工程文件.vcxproj中被引用。
请添加图片描述
实际在vcxproj文件中引用如下:5.12.8_msvc2015_64 ,可搜索。其配置路径为,项目-> 属性 -> Qt Project Settings -> Qt Installation 选项中,可以选择不同的Qt安装版本,如下图:
在这里插入图片描述
因此,如果不同开发者的开发环境中,上述配置若不一样,将导致编译异常。直接提示找不到编译器,大约提示如下:There’s no Qt version assigned to project 3DVMS.vcxproj for configuration Debug/x64. Please assign a Qt installation in ‘Qt Project Settings’.

未定义的标识符 “QWidget/QLabel…”

我在VS下新建了一个Qt动态库项目,将以前的一些代码类添加进去,编译的时候报错,提示我部分Qt的类未定义或无法打开头文件,举例:
错误(活动) 未定义标识符 “QAbstractButton” …
错误 C1083 无法打开包括文件: “QLabel”: No such file or directory …
错误(活动) 无法打开 源 文件 “QPushButton” …
在编辑器中,存在红色波浪下警示。但是,像QList、QString、QtCore/qglobal.h等都是不告警的。一开始没有发现什么规律。拿出一个正常的VSQt工程来,打开项目属性,在对比过程中发现:
在这里插入图片描述
新项目中,对Qt模块的引用只有Core,这才恍然大悟。将其他的gui、widgets模块也加进去后,问题得以解决。

LNK1181 无法打开输入文件

编译错误提示 LNK1181 无法打开输入文件“XXX_SDK.lib”
这里的 “输入” 是指 “项目属性 -> 连接器 -> 输入 -> 附加依赖项”,我们已经在上述项目中进行了lib名称(不带路径)的正确配置,如遇上述提示,可以如下操作:
P1(测试可行):在VC++目录 -> 库目录 添加 lib的路径信息
P2(测试可行:在项目属性 -> 连接器 -> 常规 -> 附加库目录 添加lib的路径信息
@note 我们在VS中进行的这些关于 “库” 的配置,均是针对lib的,至于DLL的路径,程序在运行时,操作系统会去按照自己的规则进行搜索和加载。更多关于VS集成开发环境使用本身的问题,请参照其他文章。

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

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

相关文章

package.json与package-lock.json区别需不需要被.gitignore文件忽略

前言 先要搞清楚package.json与package-lock.json文件分别是什么作用 .gitignore文件是干什么的-主页文章有 介绍 package.json 1.项目名称版本号,描述,以及运行命令和一些配置的node环境命令 2.记录那些包会在开发环境中用到,哪些包会…

【项目】从零实现一个高并发内存池

目录 一、项目介绍 1、该项目的原型 2、该项目所涉及到的技术及博主往期参考文章 3、池化技术 4、内存池的内碎片和外碎片 二、先来看一个定长内存池设计 三、高并发内存池的三层框架设计 1、thread cache的实现 1.1thread cache整体框架 1.2哈希桶映射对齐规则 1.3…

【送书福利-第九期】Web安全攻防从入门到精通

大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! 本文目录 一、前言二、内容介绍三、作者介…

【LeetCode】768. 最多能完成排序的块 II

768. 最多能完成排序的块 II(困难) 思路 对于已经分好块的数组,若块数大于 1,则可以得到以下结论:「 右边的块的所有数字均大于或等于左边的块的所有数字」。考虑这个问题:对于已经分好块的数组&#xff0…

Linux——多线程互斥

多线程互斥 抢票问题互斥锁锁的接口 理解锁锁的背景概念如何看待锁:加锁和解锁的原理锁的封装 可重入与线程安全死锁死锁的概念与条件 抢票问题 这里用上一篇: https://blog.csdn.net/qq_63580639/article/details/131054847?spm1001.2014.3001.5501 的…

LVGL lv_color_t 像素定义详解

更多源码分析请访问:LVGL 源码分析大全 目录 1、概述2、颜色格式详解2.1、LV_IMG_CF_RAW_X2.2、LV_IMG_CF_TRUE_COLOR_X2.3、LV_IMG_CF_INDEXED_XBIT2.4、LV_IMG_CF_ALPHA_XBIT2.5、LV_IMG_CF_RGBX 3、送显函数(flush_cb)中的 lv_color_t附录…

【P54】JMeter 生成概要结果(Generate Summary Results)

文章目录 一、生成概要结果(Generate Summary Results)参数说明二、准备工作三、测试计划设计 一、生成概要结果(Generate Summary Results)参数说明 可以将测试结果在客户端模式下输出,同时能美化压测输出的结果 使…

申请Let‘s Encrypt免费SSL证书、自动化续签证书

一、环境 安装证书的环境为Centos Nginx,如果没有安装Nginx则需要先安装。 二、申请流程 1、开放80和443端口 firewall-cmd --permanent --add-port80/tcp firewall-cmd --permanent --add-port443/tcp firewall-cmd --reload2、安装 certbot 使用certbot工具能…

Doris动态表使用快速入门实战

1. 动态表构功能概述 半结构化数据,是介于结构化和非结构化之间的数据。和普通纯文本相比,半结构化数据具有一定的结构性。和结构化数据相比,其结构变化复杂,我们又不能方便的使用结构化的方式去描述它。 半结构的数据中通常即包…

Java基础知识总结归纳

0. 入门常识 0.1 Java 特点 0.2 Java 和 C 0.3 JRE 和 JDK 0.4 Java 程序编译过程 1. 数据类型 1.1 基本数据类型 1.2 引用类型 1.3 封装类 1.4 缓存池 2. 字符串 String 2.1 定义 2.2 不可变性的优点 2.3 String vs StringBuffer vs StringBuffer 2.4 字符串常量池…

【网络协议详解】——BGP协议(学习笔记)

目录 🕒 1. 概述🕒 2. BGP 发言人🕒 3. 工作原理🕒 4. 报文格式🕘 4.1 报文首部🕘 4.2 打开报文🕘 4.3 更新报文🕘 4.4 保活报文🕘 4.5 通知报文 🕒 5. BGP 的…

接口实战一“篇”入魂!你真正地了解接口测试么?

目录 前言: 需求描述: 计划和目标: 需求分析: 1.功能点划分 2.接口测试用例设计 3.测试用例评审 4.测试准备 5.测试执行 前言: 接口测试是软件测试的一种类型,它主要关注软件系统中的接口或 API …

STM32CubeIDE 入门教程

1.安装教程 1.1 去ST 官网下载软件安装包:https://www.st.com/content/st_com/en.html 1.2软件安装: 2.创建工程 2.1 双击打开软件,选择工作区路径,不要出现中文名称 2.2 选择直接创建STM32 工程,我们这里以STM32F103…

详细讲解!Selenium真正绕过webdriver检测

目录 前言: 一、什么是真正绕过浏览器检测? 2、 普通的启动webdriver 3、Js注入真正绕过webdriver的检测属性 js注入的文件[stealth.min.js] 前言: Selenium是一个流行的开源测试工具,用于网络应用程序测试。它使测试人员能够…

运用短信案例举例!Appium自动化测试该如何进行PO模式

目录 前言: 案例一:自动发送短信 前言: Appium是一种广泛用于移动应用程序自动化测试的工具,可以支持iOS和Android系统。在测试App时,使用Page Object(PO)模式可以提高测试用例的可重用性和可…

如何短时间内上手公众号的运营?选择工具很重要

现在网上都在讲如何运营微信公众号,讲有什么微信公众号技巧,这些都是需要用户话花较多的时间去尝试和理解,今天小编分享一个更简单高效运营公众号的方法!下面跟着小编的教程一起学习如何使用乔拓云公众号助手去运营自己的公众号吧…

Vue3 ElementPlus Dialog封装

引言 多个页面中需要录入用户数据(弹窗内容相同),重复写弹窗代码比较繁琐。因此封装一下组件,使用效果如下: 本例中模型较简单,记录下使用方法和原理 实现原理 参考VUE官方两个例子,基本父子件…

C++ 教程(02)---- 环境设置

本地环境设置 如果您想要设置 C 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C 编译器。 文本编辑器 这将用于输入您的程序。文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。 文本编辑器的名…

技术架构演进

架构演进 单机架构应用数据分离架构应用服务集群架构读写 主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构实际互联网架构 单机架构 单机架构: 用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单&#x…

Pilota:为什么一个代码生成工具如此复杂丨GOTC Rust系列分享

对于一个 Rust RPC 框架来说,根据 IDL 做代码生成是为了让用户更方便地使用框架。而生成代码的质量以及周边能力都会对用户的开发体验有着非常非常直接的影响。 所以,字节跳动 CloudWeGo 开发了 Pilota 这样的一个框架,来为用户生成良好的代码…