大概是之前安装和使用QT太顺利了,什么都没注意就开始使用了。在使用VS2012开发Qt5.31的程序一段时间以后,虽然好用,但是发现其编译的程序不能在XP上使用,要打补丁才行。不仅VS2012本身要打补丁,而且我使用的一个库也要有相应的区别选择,实在是够麻烦的。何况VS2012本身不能在XP下使用,所以思量着使用VS2005或者VS2008做开发吧,实在没办法VS2010也行,至少家里的XP老机子能用。没想到问题来了:

1. 之前装的是QT5.31 for VS2012,因此使用VS2010怎么编译都报错,害得我以为VS2010有问题,卸载后重装依然如故,浪费我至少2小时。原来是QT库的不同,网上另外下载QT5.31 for 2010安装即可。

2. VS2012自身太霸道,不知道怎么回事覆盖了我VS2010的默认C++编译选项,按照这篇文章改回来即可:
http://stackoverflow.com/questions/13663898/specified-platform-toolset-v110-is-not-installed

3. QT5 Add-in 虽然可以安装给VS2008使用,但是使用这个插件打开任何一个.pro文件都会出现莫名其妙的转换失败问题。而且我后来发现没有QT 5.31 for VS2008的版本,而且网上查了一下QT 5.0 5.1 5.2版本都没有专门的for 2008版本啊,莫名其妙提供这个安装选项干什么。但是隐约记得强行指定QT 2012库也可以编译,以后再回来确认。今天急着要做正式开发。

4. 我自己之前使用VS2005编译了一个QT 4.53的库,很好用,各种书籍的例子都畅通无阻。但是新建一个工程,编译运行没有任何警告。但是把工程库指向QT4.86的时候,就会发出警告,提示宏定义重复了:
1>c:\qt\4.8.6_2008\include\qtcore\../../src/corelib/global/qconfig.h(41) : warning C4005: 'QT_LARGEFILE_SUPPORT' : macro redefinition
1> command-line arguments : see previous definition of 'QT_LARGEFILE_SUPPORT'
使用VS2008新建一个空工程,使用同一个QT4.86库就没有任何问题。

------------------------------------------------------------------------------------
总结:
1. VS2005 + Qt4.53用来学习书上的例子,真是绝美。Qt 4.53是2009年年末发布的,做一般性的工程大概也够了,谁会需要那么多QT新特性啊,一般越是小白越起劲,人家KDE那么大的天文工程都使用QT4做出来了。
这是QT5的新特性列表:http://qt-project.org/wiki/Qt-5Features
2. VS2008 + Qt4.86做QT4的工程,也是没有任何问题,连个警告都没有。
3. VS2010 + Qt5.31做QT5的工程也不错,就是XP上运行太慢,另外别忘了给它装对应的QT5.31 for 2010
4. VS2012 + Qt5.31本来一直都觉得很好用,但是需要通过打补丁,而且是各种补丁,也能解决所有的开发与配置问题,但我不愿意折腾,何况也不能在XP下运行,所以放弃。

我目前这个工程打算迁移到方案2试试,不是自己编译的库,发布的时候应该更可靠一些。除了未来有可能会使用JSON,其它方面不需要任何新特性。如果开发遇到问题,就转到方案3。赶紧行动~

------------------------------------------------------------------------------------

补充1:VS2012使用QT 5.31 for 2010没有任何问题!看来VC的向下兼容做得不错。

补充2:
使用VS2008编译QT程序的时候,总是碰到这样的错误:
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR90D.dll)
在这里
Project Property->Configuration Properties->Linker->Input->Ignore Specific Library
填上:
libcmtd.lib

补充3:
至今没搞明白,如何静态编译QT的应用程序(不是QT自身,但这样有可能需要静态编译QT?),可能是这样设置:
Project Property->Configuration Properties->C/C++->Code Generation->Runtime Library
设置:
Multi-threaded (/MT)
同时忽略(同补充2):
LIBCMT.lib
(注意,Debug和Release版要分别设置一遍)

补充4:
如何简单发行QT的应用程序,使之不再依赖VS开发环境(加上VC的2个DLL应该还是可以的),可能是这样:
http://bbs.csdn.net/topics/310079403
http://support.microsoft.com/kb/148652

补充5:
好好的程序,Debug没问题,Release版发行程序怎么会缺了一部分资源图片呢?

补充6:
1>c:\qt\4.8.6_2008\include\qtcore\../../src/corelib/global/qconfig.h(41) : warning C4005: 'QT_LARGEFILE_SUPPORT' : macro redefinition
1> command-line arguments : see previous definition of 'QT_LARGEFILE_SUPPORT'

在VS2008中也出现了,要想办法去掉。
后续:找到qt\src\corelib\global\qconfig.h文件(双击编译错误就可以找到),找到这行:
#define QT_LARGEFILE_SUPPORT 64
替换成:
#ifndef QT_LARGEFILE_SUPPORT
#define QT_LARGEFILE_SUPPORT 64
#endif

05-19 07:44