使用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 # ...
随机推荐
- 【26.09%】【codeforces 579C】A Problem about Polyline
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- hdu3698 Let the light guide us dp+线段树优化
http://acm.hdu.edu.cn/showproblem.php?pid=3698 Let the light guide us Time Limit: 5000/2000 MS (Java ...
- DevCloud项目管理与Leangoo使用对比
DevCloud(华为软件开发云)是集华为研发实践.前沿研发理念.先进研发工具为一体的研发云平台,面向开发者提供端到端的研发工具服务.项目管理是DevCloud服务之一,致力于为敏捷开发团队提供简单高 ...
- Live Unit Testing
Live Unit Testing 相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是 ...
- 【Codeforces Round #438 A】Bark to Unlock
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 枚举它是在连接处,还是就是整个字符串就好. [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/stdc+ ...
- 关于MOVE 和 CopyMemory 的用法区别
最近做了一个数据采集服务器, 根据程序的框架,使用了大量的指针结构体(内存块) 操作. 例子: PArrayByte = ^TArrayByte; TArrayByte = packed recor ...
- Swift过程控制和功能
流量控制(Control Flow) For周期 for骑自行车和C语言,OC用法很相似,平时for()和 for in两种. 遍历可以使用下划线"_"略对值的訪问等. Switc ...
- mybatis如何实现分页功能?
1)原始方法,使用limit,需要自己处理分页逻辑: 对于mysql数据库可以使用limit,如: select * from table limit 5,10; --返回6-15行 对于oracle ...
- 制作一个简单的WPF图片浏览器
原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1. 对指定文件夹下所有JPG文件进行预览2. 对选定图片进行旋转3. 对选定图片 ...
- 简明Python3教程 6.基础
你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...