• 做一个幸福的人,读书,旅行,努力工作,关心身体和心情。
  • 不管有没有人爱,也要努力做一个可爱的人。不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。

VisualStudio2013搭建Qt开发环境遇到的问题

C/C++ lcq 4年前 (2015-04-12) 630次浏览 0个评论

最近在公司使用Visual Studio 2013搭建Qt开发环境出了一些问题。一一记录一下,以防以后再遇到又要重新折腾一次。

首先说一下具体环境。我是在Windows 7旗舰版下面装的Visual Studio 2013旗舰版。Visual Studio 2013给个链接,Qt我先用的是Qt5.4.0(32位有opengl的),链接就不给了,Qt版本更新非常频繁。自己去官网找最新的版本。

问题一:Visual Studio 2013无法识别Qt的代码,也就是对Qt的代码没有提示功能,只要涉及到Qt提供的代码,下面就是一红色的波浪线。其实本来也没有什么,使用Qt5.4.0是正常的,但是使用Qt5.4.1却不行。具体看下图就知道:

这个应该是Visual Studio 2013没有找到Qt的源代码导致的。所以在项目里面将Qt的源代码加进去即可。具体操作如下:在项目下面鼠标右键,属性—>配置属性—>VC++目录—>包含目录。将Qt源代码的路径增加进去即可。如下图所示:

这下,代码下面恼人的红色的下划波浪线终于没有了,按F12终于可以跳转了。

问题二:按F5运行过程中出现如下错误(或在在debug目录下面运行exe)

提示很清楚了,因为没找到对应的dll。解决办法可以将C:QtQt5.4.15.4msvc2013_openglbin这个路径(具体自己去找对应的Qt安装路径)下面的dll全部拷贝到相应的exe目录下面去。或者,将C:QtQt5.4.15.4msvc2013_openglbin这个路径加入到环境变量Path下面。

问题三:提示没有Qt版本。如下图所示:

这个问题估计是Qt Visual Studio Add-in的bug吧。明明我将Qt的版本设置好了,它却不认。解决办法,在解决方案鼠标右键,点击“Change Solution’s Qt Version”,进入对话框,双击一个设置的Qt版本即可。

问题三:我在阅读代码的时候,单步执行发现源代码无法正常创建数据库。所以我想做个小demo看在我的电脑上能否正常创建数据库。首先是无法第一层include Qt数据库方面的头文件,其实是include进来之后,编译发现有如下问题:error LNK2019: 无法解析的外部符号 “__declspec(dllimport) public: __thiscall QSqlDatabase::QSqlDatabase(void)” (__imp_??0QSqlDatabase@@QAE@XZ),该符号在函数 “public: __thiscall HelloQt::HelloQt(class QWidget *)” (??0HelloQt@@QAE@PAVQWidget@@@Z) 中被引用。后面折腾了很久之后,才想起在新建项目的时候,没有包含数据库方面的组件。如下图所示,只要使用Visual Studio 2013新建项目的时候将SQL选上,即可。

问题三:关于Qt信号槽在Visual Studio 上的连接。

因为之前使用Qt开发的项目是在QtCreator上面完成的。而且那时候我的信号与槽的连接,都是显示的使用connect来连接的。发现在Visual Studio 2013下面,有两种不需要使用connect连接信号和槽,也可以自动触发槽。

第一种:在UI编辑模式下,在QtCreator的菜单下面,按F4或者单机 Edit Signs/Slots,即可转到信号槽编辑界面。

第二种:槽函数的命名按照系统能识别的方式来命名。如:对于QPushButton,我们都知道都有个clicked()的信号。假设你的QPushButton的ObjectName为btnOk,你只要将槽函数命名为on_btnOk_clicked(),那你就不需要connect信号和槽,QPushButton当发出clicked()的信号时,会自动调用on_btnOk_clicked()。总结就是槽命名规则为:void on_<object name>_<signal name>(<signal parameters>), 翻译一下就是void on_<对象名>_<信号名>(<信号参数>)。个人不太喜欢这种隐世的调用方式,因为有的时候执行到槽函数那里,都不知道是哪个信号发出来的。connect一下就一行代码,代码阅读起来方便很多。

问题四:使用QSqlDatabase创建数据库文件的时候,需要有路径存在才可以创建数据库文件。比如,你想在C盘的sqlite文件夹下创建一个数据库文件,如果sqlite文件夹不存在,那么创建数据库文件会提示out of memory。所以最好的处理方法是在创建数据库文件的时候,需要检测这个路径是否存在,如果没有,那么就创建文件夹吧。


乐趣公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明VisualStudio2013搭建Qt开发环境遇到的问题
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址