使用VS2010开发Qt程序的4点经验(QT4到QT5的升级,更改sln文件,切换工程使用的Qt库,在VS的Solution Explorer视图中建立文件夹)
导读
相比于Qt Creator,我更喜欢用VS2010来进行开发。虽然启动时间相对较慢,但是VS下强大的快捷键和丰富的插件,以及使用多年的经验,都让我觉得在开发过程中得心应手。其中最重要的一点是,有时候Qt Creator报的错误莫名其妙。要根据提示找到错误根源显得无从下手。而VS的一般错误说明都比较人性化,即便在某些时候无从解决,也可以通过搜索引擎大致定位出错误的源头。下面是在调试网上的一些源代码的时候,积累下来的一点经验,记下来一来备忘,二来也可供后来人参考。
The system cannot find the path specified
当我从用VS2010打开从网上下载下来的源代码工程进行编译的时候,输出栏中出现了一系列如下的错误提示:
我的开发环境为:VS2010 32位旗舰版,Windows 7 64位,Qt库版本为5.2.1。第一次遇到这样的问题,还真的莫名其妙。于是上网搜了搜,发现了一些苗头。该工程原本是使用Qt 4.x进行开发的,但是本人使用的是Qt 5.2.1。因此我想应该是Qt库的版本不同而造成的。后来在Qt开发者社区中发现了一个解决方案,具体解决过程如下:
找到工程目录下面的.vcxproj文件,打开并搜索关键字:QtVersion
替换为如下内容:
这时再回到VS,会发现如下提示:
点击重新加载之后,如果直接开始编译工程会得到如下的错误提示:
很显然,我们需要配置下该工程的Qt库版本。因为我们在.vcxproj文件中改动了工程使用的Qt库版本,于是这里需要在Qt-VS-Addon插件中进行配置,选择Qt Project Settings弹出如下对话框,选择当前可用的Qt库版本(我的版本名称为msvc2010),然后如右侧图所示勾选必须的模块:
点击OK,然后上述错误就可以被消除了。对于基于其他Qt版本的工程,也可以如上进行移植。移植过程中会需要修改头文件,毕竟Qt 4.x和Qt 5.x相比差异性较大,这也是我在阅读人家源代码的时候最大的烦恼。往往改着改着就不想改了,因为牵涉的版本问题(包括Qt和VS,甚至第三方库)太多太折磨人了。
Qt 4.x port to Qt 5.x
上面说过,如果要移植基于Qt 4.x的工程到Qt 5.x,要做的事情还真比较多。这一节就讲讲Qt库的lib文件。以上例说明,当上述错误修改好后,编译工作并不能顺利完成,在我的机器上报出来如下的错误:
前面编译工作都没报错,显然是连接阶段出错了。看上面这名字,似乎是QtCored.lib这个文件的过度版本无法找到。于是,执行操作:“点击项目名称->右键选择项目属性->配置属性->链接器->输入->附加依赖项”,可以看到:
在Qt的安装目录下(如:C:\Qt\Qt5.2.1\5.2.1\msvc2010_opengl\lib),我并没找到以上这些lib文件,于是尝试用上述目录中对应的lib文件进行替换:
重新编译工程,此时编译过程顺利结束,生成了期待中的可执行程序。这仅仅是lib文件的设置,源代码的修改其实是另一大难题。尤其是QtGui在Qt 5.x中已经消失,因此需要大面积修改文件内容。
切换工程使用的Qt库
当机器中同时安装了多个版本的Qt库的时候,在VS也可以自如的指定使用那个版本进行编译。当然,仅仅限于大版本相同的情况下,因为这时需要修改源码的地方较小,甚至不需要修改就可以完成编译工作。如果大版本不同的话,修改源码是免不了的一件事。
如何添加不同的Qt库版本到VS中来呢?这个工作就交由qt-vs-addin来完成吧。 在菜单栏中选中Qt options,点击Add按钮并选择好Qt库的安装路径即可,版本名可自定义。在Qt Default Settings页面中,还可以指定一些编译时的默认设置。
值得注意的是,在VS中首次建立好Qt工程之后,如果后续又添加了不同Qt库版本,并尝试用新的Qt库来编译工程,那么一定要将新的Qt库的名称保持与建立工程时选择的Qt库名称保持一致,否则将会出现无法理解的错误,或许摸索一整天都不会有结果。当然,或许修改.vcxproj文件也许有用。
在VS的Solution Explorer视图中建立文件夹
在VS中如何直接新建文件夹,并且保持和文件系统同步呢?以前的做法是,先在工程目录下建立一个新的文件夹,然后到VS工程视图中引入进来。虽然可以用,未免显得太过麻烦。如下是一个经过实践的办法:
在Solution Explorer视图中点击工程名称,可以发现上面有个小图标出现了(提示信息为:显示所有文件),而点击解决方案名称的时候,这个图标又消失了。点击一下这个图标,顿时可以发现当前工程目录在磁盘上的所有文件都出现了,包括编译过程中产生的各种中间文件。显然,这就是我们要的!建立文件夹的步骤如下:
选择好文件夹的名称,打开工程所在目录,对应的文件夹赫然在目!如下是我用文件夹组织工程的前后状况:
显然清爽了不少。源代码文件在逻辑上进行了划分,对于清晰的理解整个工程的模块、架构都有莫大的帮助。对于后来的开发者和维护人员都是一种灵魂的解脱...
参考
1. http://qt-project.org/forums/viewthread/24277
http://www.cnblogs.com/csuftzzk/p/VS_Qt_Experience.html
使用VS2010开发Qt程序的4点经验(QT4到QT5的升级,更改sln文件,切换工程使用的Qt库,在VS的Solution Explorer视图中建立文件夹)的更多相关文章
- WINDOWS7 系统中建立文件夹映射
如何在WIN7中建立文件夹映射,还有以及MKLINK的具体使用方法: 步骤如下: 1.以映射d盘1文件夹为例: 2.按win+r,输入cmd,点击确定: 3.提示符后输入mklink /J " ...
- 使用VS2010开发Qt程序的一点经验
导读 相比于Qt Creator,我更喜欢用VS2010来进行开发.虽然启动时间相对较慢,但是VS下强大的快捷键和丰富的插件,以及使用多年的经验,都让我觉得在开发过程中得心应手.其中最重要的一点是,有 ...
- 使用VS2010开发Qt程序的一点经验(转载)
转载:http://www.cnblogs.com/csuftzzk/p/VS_Qt_Experience.html 导读 相比于Qt Creator,我更喜欢用VS2010来进行开发.虽然启动时间相 ...
- VS2010开发程序打包详解
VS2010开发程序打包详解 转自:http://blog.sina.com.cn/s/blog_473b385101019ufr.html 首先打开已经完成的工程,如图: 下面开始制作安装程序包. ...
- Windows如何打包Qt程序
很多Qt爱好者想发布自己的Qt软件,但却发现在其他没有安装Qt SDK的机器上无法运行,这就是本文想要说明的问题.现在网上大部分软件都要发布自己开发的应用程序,都会打包到exe文件中,待安装完exe文 ...
- Qt程序打包成exe可执行文件图文教程(图文并茂,且用到了filepack)
很多Qt爱好者想发布自己的Qt软件,但却发现在其他没有安装Qt SDK的机器上无法运行,这就是本文想要说明的问题.现在网上大部分软件都要发布自己开发的应用程序,都会打包到exe文件中,待安装完exe文 ...
- Qt程序打包成exe可执行文件
很多Qt爱好者想发布自己的Qt软件,但却发现在其他没有安装Qt SDK的机器上无法运行,这就是本文想要说明的问题.现在网上大部分软件都要发布自己开发的应用程序,都会打包到exe文件中,待安装完exe文 ...
- opencv开发的程序分发给客户时所需要的dll文件
这里主要讲在其他裸机,没有搭建开发环境机器上运行自己开发的程序. 为了测试,我专门用visualbox搭建了一个虚拟机(主机和虚拟机都是win7系统) 在发给别人程序运行出现错误:msvcp100d. ...
- 4、树莓派的中文:安装ftp,安装gcc,安装qt,编译qt程序,运行qt界面程序
本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ1222698 1.安装FTP:sudo apt-get install vsftpd 2.配置FTP,修改,/etc/vsftpd.conf # ...
随机推荐
- BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
标题效果:定整N(N <= 1e7),乞讨1<=x,y<=N和Gcd(x,y)素数的数(x,y)有多少.. 思考:推,. 建立gcd(x,y) = p,然后,x / p与y / p互 ...
- JavaScript函数实现鼠标指向后带图片的提示效果
转载:http://www.cnblogs.com/jack86514/archive/2009/04/01/1427584.html 当我们在写一个网页程序的时候,很多方法可以提供页面的动态显示,从 ...
- 卷积神经网络(CNN)的细节问题(滤波器的大小选择)
0. 滤波器的大小选择 大部分卷积神经网络都会采用逐层递增(1⇒ 3 ⇒ 5 ⇒ 7)的方式. 每经过一次池化层,卷积层过滤器的深度都会乘以 2: 1. 权值共享:减轻过拟合 & 降低计算量 ...
- DELPHI高性能大容量SOCKET并发(八):断点续传(上传也可以续传)
断点续传 断点续传主要是用在上传或下载文件,一般做法是开始上传的时候,服务器返回上次已经上传的大小,如果上传完成,则返回-1:下载开始的时候,由客户端上报本地已经下载大小,服务器根据位置信息下发数据, ...
- Python 动图、动画制作 —— moviepy、matplotlib.animation
进入命令行界面(windows ⇒ cmd),下载安装,pip install moviepy 0. figure 的成员函数 # 创建 figure fig, ax = plt.subplots() ...
- WPF自定义TextBox及ScrollViewer
原文:WPF自定义TextBox及ScrollViewer 寒假过完,在家真心什么都做不了,可能年龄大了,再想以前那样能专心坐下来已经不行了.回来第一件事就是改了项目的一个bug,最近又新增了一个新的 ...
- c#调api串口通讯
原文:c#调api串口通讯 在调试ICU通信设备的时候,由于串口通信老出现故障,所以就怀疑CF实现的SerialPort类是否有问题,所以最后决定用纯API函数实现串口读写. 先从网上搜索相关代码(关 ...
- Qt程序调试之Q_ASSERT断言(条件为真则跳过,否则直接异常+崩溃)
在使用Qt开发大型软件时,难免要调试程序,以确保程序内的运算结果符合我们的预期.在不符合预期结果时,就直接将程序断下,以便我们修改. 这就用到了Qt中的调试断言 - Q_ASSERT. 用一个小例子来 ...
- Folly: Facebook Open-source Library Readme.md 和 Overview.md(感觉包含的东西并不多,还是Boost更有用)
folly/ For a high level overview see the README Components Below is a list of (some) Folly component ...
- Android在putString和getString使用方法
函数: putString(String key,String value); 功能:将键为key的值为value. 详细的容器详细考虑比如对于Editor 的对象来讲: 代码例如以下: 首先新建一个 ...