导读

相比于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视图中建立文件夹)的更多相关文章

  1. WINDOWS7 系统中建立文件夹映射

    如何在WIN7中建立文件夹映射,还有以及MKLINK的具体使用方法: 步骤如下: 1.以映射d盘1文件夹为例: 2.按win+r,输入cmd,点击确定: 3.提示符后输入mklink /J " ...

  2. 使用VS2010开发Qt程序的一点经验

    导读 相比于Qt Creator,我更喜欢用VS2010来进行开发.虽然启动时间相对较慢,但是VS下强大的快捷键和丰富的插件,以及使用多年的经验,都让我觉得在开发过程中得心应手.其中最重要的一点是,有 ...

  3. 使用VS2010开发Qt程序的一点经验(转载)

    转载:http://www.cnblogs.com/csuftzzk/p/VS_Qt_Experience.html 导读 相比于Qt Creator,我更喜欢用VS2010来进行开发.虽然启动时间相 ...

  4. VS2010开发程序打包详解

    VS2010开发程序打包详解 转自:http://blog.sina.com.cn/s/blog_473b385101019ufr.html 首先打开已经完成的工程,如图: 下面开始制作安装程序包. ...

  5. Windows如何打包Qt程序

    很多Qt爱好者想发布自己的Qt软件,但却发现在其他没有安装Qt SDK的机器上无法运行,这就是本文想要说明的问题.现在网上大部分软件都要发布自己开发的应用程序,都会打包到exe文件中,待安装完exe文 ...

  6. Qt程序打包成exe可执行文件图文教程(图文并茂,且用到了filepack)

    很多Qt爱好者想发布自己的Qt软件,但却发现在其他没有安装Qt SDK的机器上无法运行,这就是本文想要说明的问题.现在网上大部分软件都要发布自己开发的应用程序,都会打包到exe文件中,待安装完exe文 ...

  7. Qt程序打包成exe可执行文件

    很多Qt爱好者想发布自己的Qt软件,但却发现在其他没有安装Qt SDK的机器上无法运行,这就是本文想要说明的问题.现在网上大部分软件都要发布自己开发的应用程序,都会打包到exe文件中,待安装完exe文 ...

  8. opencv开发的程序分发给客户时所需要的dll文件

    这里主要讲在其他裸机,没有搭建开发环境机器上运行自己开发的程序. 为了测试,我专门用visualbox搭建了一个虚拟机(主机和虚拟机都是win7系统) 在发给别人程序运行出现错误:msvcp100d. ...

  9. 4、树莓派的中文:安装ftp,安装gcc,安装qt,编译qt程序,运行qt界面程序

    本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ1222698 1.安装FTP:sudo apt-get install vsftpd 2.配置FTP,修改,/etc/vsftpd.conf # ...

随机推荐

  1. ES数据

    通过Elasticsearch使用的你的数据 Elasticsearch 系列导航 elasticsearch 与 elasticsearch-head 的安装 ElasticSearch Index ...

  2. HTML5 的成长之路

    html5历史 w3c从2008年提出html5的概念,目前html5的版本已经趋于稳定,也逐步得到了业界的认可和接受. 以前我们有一个疑问,HTML5与Flash究竟谁将在移动互联网时代称霸市场?这 ...

  3. WPF中选择文件及文件夹

    最近从winform转WPF,遇到了各种各样的问题.然而网上的关于WPF的资料少之又少,甚至连基本的文件选择操作,百度搜索的首页都没有一个比较好的方法.所以,踩了几个坑之后,我把我得到的方法分享给大家 ...

  4. 动态加载Layout

    因为现在手头上做的需要显示很多不同布局,想着拆分开来不要全部都写到main.xml里,于是就想到动态加载Layout 目前试了下, LinearLayout page = (LinearLayout) ...

  5. windown下linux子系统的安装和卸载

    原文:windown下linux子系统的安装和卸载 安装 第一步  打开开发人员模式 第二步  勾选适用linux的window子系统 第三步  打开powershell 第四步  在PowerShe ...

  6. python 教程 第十九章、 图形界面编程

    第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...

  7. 运行时动态伪造vsprintf的va_list

    运行时动态伪造vsprintf的va_list #include <stdio.h> int main() { char* m = (char*) malloc(sizeof(int)*2 ...

  8. cocos2d-x 3.2 它 2048 —— 第三

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  9. Spring MVC专题

    Spring从3.1版本开始增加了ConfigurableEnvironment和PropertySource: ConfigurableEnvironment Spring的ApplicationC ...

  10. docker include not found: networks

    启动clickhouse的docker镜像时,出现了以下错误 include not found: networks google之后发现是因为可能不支持ipv6导致的解决方法 就是通过设置 /etc ...