Qt简介以及vs.net 2005与qt的联姻指南
一.为什么要用Qt
提起Qt Designer,搞linux的朋友早就非常熟悉,linux下界面编程基本都用它。但是windows下,用qt编写GUI的人却不多,西电我听说的也几乎没有。有人说,我直接用MFC不就行了?我觉得吧,MFC是一个框架,但它不应当要求使用它的人熟悉了整个框架之后才能够使用这个系统,但很显然,如果你不了解内部机制,是不太可能把它用好的,我不能解释清楚为什么会出现这种现象。而且,MFC只适用于WIN平台,Qt可以在Windows,Linux,Mac等上,MFC跨平台的特性远没有qt好。最重要的一点是,我比较懒,还不喜欢上层程序的编写,让我因为想做界面去学MFC,实在不爽,因此就选择了Qt拉。
有为朋友说过,使用Qt库构建用户界面其实并不难,甚至比wxWidgets更加简单,稍加学习即可入门。它还是跨平台的,而其开源版同样是免费的,更要命的是开源版在Windows下仅支持MinGW,简直是为我们的需求订做的。——在这里需要重申,使用RAD的目的不是让你学会懒惰,去荒废Windows或Linux的GUI SDK,而仅仅是一种快速建立demo的手段。C++下的GUI库并不少,之所以选择Qt,不为别的,只因为它提供了最好的RAD。当然这只是个小小的推荐而已,C++领域图形库众多,每人都有自己的需要和喜好,并不想将“自由软件圣战”等口水引到这里^^。o:p>
二.Qt的基本分析
有关Qt的基本特性,google一搜一大片,我就不多说了。在这里简单提两句,就是Qt有两个版本,商业版和开源版。开源版原则上只适用于minGW编译器,而我不大想用这种编译器,毕竟不想搞成linux。Windows下用vs平台习惯了,代码编写的辅助功能也很强大,实在不想换平台了。怎么办呢?这篇文章就是为了解决如何用vs2005来正常编译使用Qt开发包的问题。
网上也有几篇这样的文章,但是我这里试都有点问题,讲的也不详细,我才萌生了些一片专门详细讲解文章的念头。
三.联姻步骤
这里一部分内容参考了老外的一个文档,但是做了很多实际的补充与提醒。
1. 下载源代码包,请注意不是二进制文件。源代码包是哪种名字里面有src的zip。在这里下载:http://qtnode.net/wiki/Download_Qt。同时下载补丁包,注意版本。在这里下载:http://qtnode.net/wiki/Image:Qtnode-acs-qt4.1.2.zip
2. 把源代码和补丁压缩包里面的文件都解压到同一个目录下,注意必须是根目录,或者目录中不能有空格,否则会影响以后的步骤。先解压源代码,再解压补丁
3. 设置好你的编译器路径(主要是环境变量path,include及lib里必须包含vc的相关路径)
建议:如果使用vc6.0,在命令行运行vcvars32.bat;
如果使用vc.net 2003或者2005,直接从VC的工具里运行命令行(开始->程序->VC.net->vc.net tools->vc .net command prompt)
测试你是否正确的设置好环境的方法是在当前命令行下运行nmake /?
例如:C:\Qt\4.1.1> nmake /?
Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
Usage: NMAKE @commandfile
NMAKE [options] [/f makefile] [/x stderrfile] [macrodefs] [targets]
Options:
....
出现上面的提示,说明的你的环境已经OK了。如果还是没有ok,那么把vcvars32.bat这个文件直接拷贝到你的Qt解压缩文件夹中直接双击进行。我的环境是vs.net 2005,我的这个文件是在D:\Program Files\Microsoft Visual Studio 8\Common7\Tools这个目录下的
4. 命令行中运行 C:\Qt\4.1.1> installpatch411.bat
你将看到:
C:\Qt\4.1.1> installpatch411.bat
patching file qconfigure.bat
patching file examples/threads/waitconditions/waitconditions.pro
patching file misc/bcc32pch/Makefile.win32-borland
patching file misc/bcc32pch/bcc32pch.cpp
patching file misc/bcc32pch/bcc32pch.pri
patching file misc/bcc32pch/bcc32pch.pro
patching file mkspecs/win32-bccx/qmake.conf
......
......
......
patching file tools/porting/src/rpptreeevaluator.cpp
patching file tools/porting/src/rpptreewalker.cpp
patching file tools/porting/src/src.pro
Press any key to continue . . .
Now run qconfigure.bat
5. 这时候,我们可以看到,目录下有qconfigure.bat,还有configure.bat。在这里我们使用qconfigure.bat这个批处理文件。如果你想改变编译选项的话,可以运行configure.exe --help查看相关的选项。
运行configure.exe –help,将会列出所有的选项,你可以通过打星号选择自己感兴趣的。已经打星号的是默认选项。
在这里我们使用补丁中qconfigure.bat,qconfigure.ba需要编译器作为参数
* msvc <- if you are using Visual Studio 6.0
* msvc.net <- if you are using Visual Studio .NET (2003)
* msvc2005 <- if you are using Visual Studio 2005
比如在我的机器上,我就用的qconfigure.bat –msvc2005 –debug-and-release –static –no-stl,表示生成静态库。可以在debug和release状态下使用,不允许stl托管。
运行了qconfigure.bat后,会有三次提示:
a. 接受GPL license,敲'y';
b.开始编译qmake,敲'y';
c.建立makefile,敲'y'.
接着你会看到提示信息:
====================================================
You are now ready to build Qt (msvc2005)
If you specified -static, type 'nmake sub-src'
otherwise, type 'nmake'
To start over, type 'nmake distclean'
and then re-run qconfigure.bat
====================================================
大概是说:要编译静态库使用'namke sub-src',否则使用'nmake',结束后敲入'nmake distclean'并且重新运行'qconfigure.bat'
我是编译了静态库的,所以我选择了namke sub-src,这一步等待的时间比较长,我之所以选择这一步,是因为我想编译出来的程序需要最少的附件就可以运行。.net下普通c++程序的移植性已经让我非常头疼了……
6. 等待了好久之后(总之我是去打了一盘war3),终于完了。接下来就是构建Qt库。这个命令很简单,C:\Qt\4.1.2> nmake。然后?我又去打了一盘war3。时间太漫长了。
7. 然后终于完成了,这时候我们就可以开始设置全局变量了。有很多建立环境的方法,这里使用最简单的一种:
设置QT 库的路径,根据你的源码的存放目录,在环境变量path增加 你的安装目录\bin,lib中增加 你的安装目录\lib,include中增加你的安装目录\include,同时增加一个变量,变量名称QMAKESPEC,我的vc2005环境,变量值为win32-msvc2005,如果你使用的是vc2003,值为win32-msvc.net,如果你使用的是vc6.0,值为win32-msvc。
具体请参考http://www.cs.usask.ca/grads/wew036/latex/env.html
8. 当环境变量改变后,怎么知道是否设置正确呢?重新打开命令行,
PROMPT:\> qmake -v
QMake version: 2.00a
Using Qt version 4.1.2 in C:\Qt\4.1.2\lib
PROMPT:\> echo %QMAKESPEC%
win32-msvc.net 你的运行结果如果和上面的一样,则表示设置成功。
9. 接下来,我们就可以通过一个小程序来试验一下我们的安装成果。
a.建立一个hello.cpp,内容如下:
#include <QApplication>
#include <QLabel>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello World!");
label->show();
return app.exec();
}
b.创建visual studio工程.
按照一下步骤创建适用于vc.net的xx.vcproj
prompt> qmake -project -t vcapp -o xx.pro
prompt> qmake
这样你的工程目录下就有了hello.vcproj工程文件,你就可以在vc.net中打开它了
在这里不得不提醒一下,千万不要把xx.cpp等类似文件放在根目录下,请新建一个文件夹,然后把源代码放进去,再进行qmake,否则qmake会自动搜索本地目录下的所有inc路径等,生成的文件会让你感觉很郁闷。
10.运行
生成了相关工程之后,用vs2005打开,就能直接编译通过,yes!不过你这个时候选择生成的话,一般都回出现“无法解析的外部符号xxxxxx”这种错误。为啥?因为自动生成的工程属性中并没有包含所有需要的lib库。请在msdn中查询这些外部符号所需的lib库并加进属性中即可。例如上面这个程序,需要你外接的库就包括Imm32.lib, Ws2_32.lib,winmm.lib。
接下来就享受你自己的第一个.net环境下的qt程序吧!
好了。我们可以在vs中自由使用qt进行GUI的设计了。本文到此结束。最后提醒一点的是,可以往工程里面增加文件,但是一定要重新qmake