2.3 开发环境的设置
在VS 2010中开发Qt应用程序需要做以下设置。
1.安装插件Qt Visual Studio Add-in。为了便于在VS 2010环境下使用Qt库,可以从qt.nokia.com/download下载、安装插件Qt Visual Studio Add-in。安装时选用默认的安装参数即可。安装完毕后,运行VS 2010,会有一个名为Qt的菜单项。执行其中的Qt Options\Qt Versions\Add,在Version Name域输入任意名字比如QT 4.8.1,在Path域中输入d:\qtsdk\desktop\qt\4.8.1\msvc2010。至此,该插件和VS 2010无缝地集成在一起了。
2.指定Qt库的头文件位置以及库文件。设我们已经按照1.4节所述将目录"d:\qtsdk\desktop\qt\4.8.1\msvc2010"映射为盘符"q:\",则所有Qt库的头文件都存放在q:\include目录下。Qt库包含多个子模块,每个子模块的头文件存放在一个单独的子目录下。例如,q:\include\QtCore子目录存放Qt核心模块的所有头文件,q:\include\QtGui子目录存放模型界面子模块的所有头文件,q:\include\QtWebKit存放Web开发子模块的所有头文件。在每个子目录下,所有头文件会被包含到一个"汇总"头文件中。例如,q:\include\QtGui目录下有一个名为"QtGui"的头文件,它包含了这个目录下的所有其他头文件。通过包含这个汇总头文件,我们就可以间接地包含这个子目录下的所有其他头文件,不必再写一大堆的include语句,使得我们的程序看起来更加简洁。
Qt应用程序通常以相对路径而不是绝对路径的方式包含Qt库的头文件,比如使用"#include <QtGui>"而不是使用"#include <q:\include\QtGui>"。当编译器看到这个预处理命令时,需要知道去哪个目录寻找所包含的头文件。
对于VS 2010,具体操作步骤如下。首先创建一个项目(或者打开一个已经存在的项目),然后执行"项目\属性\通用属性\VC++(www.cppentry.com)目录",在"包含目录"中添加:"q:\include;q:\include\QtCore;q:\include\QtGui"。这样,我们就可以在C++(www.cppentry.com)程序中通过"#include <QtGui/QColor>"或者更简单的"#include <QColor>"方式,包含子目录QtGui下的头文件QColor。如果读者用到了Qt库的其他子模块,也应该将它们的路径添加到"包含目录"中。
可供Qt应用程序链接的Qt库实际上是由多个库文件组成的,这些库文件都存放在q:\lib目录下,每个子模块对应两个库文件,其中一个的扩展名为".lib",供静态链接模式下使用,另外一个的扩展名为".DLL",供动态链接模式下使用。
一个Qt应用程序必定会调用某些库文件中的某些函数,VS 2010链接器需要知道到哪个目录去寻找这些库文件,因此我们需要做以下配置。执行"项目\属性\通用属性\VC++(www.cppentry.com)目录",在"库目录"中添加"q:\lib"。再执行"项目\属性\通用属性\连接器\输入",在其中的"附加依赖项"中加入库文件的名称。例如,如果一个Qt应用程序只用到QtCore以及QtGui模块,而且这个应用程序以动态链接方式和Qt库相链接,那么所要加入的库文件应该为"qtmaind.lib QtGuid4.lib QtCored4.lib"。
以动态方式链接的Qt应用程序在运行的时候需要使用q:\bin目录下的动态链接库(DLL文件),所以用户应该将该目录加入到Windows系统的环境变量PATH中。具体来说,执行显示桌面\我的电脑\右键\属性\高级\环境变量\系统变量\PATH,在其末尾加上q:\bin。
3.编写测试程序。安装完毕Qt Visual Studio Add-in,我们可以尝试在VS 2010环境下编写一个小测试程序。运行文件\新建\项目,在弹出的对话框中选择Qt4 Projects。有多种项目类型可供选择,本书仅涉及其中两个。
(1)Qt Concole Application,即主控台程序。这种类型的程序不使用Qt GUI模块的任何类或者函数,运行时没有图形界面,只有一个能够显示文字的窗口,允许用户通过键盘输入一些信息,程序将运行结果以文字形式显示在该窗口中。该窗口通常被称为命令行窗口。
(2)Qt Application,即一般的图形界面程序。这种类型的程序使用Qt GUI模块的函数,显示一个具有图形界面的窗口。以上两种类型相互排斥,不要试图创建一个既具有命令行窗口又具有图形界面窗口的程序。如果一个程序使用了Qt GUI模块的任何类或者函数,就只能创建图形界面程序。2.4节将介绍如何创建主控台程序,本节仅介绍如何创建图形界面程序。
在"名称"域输入hello,在"位置"域输入一个目录名,以存放Qt插件自动生成的源文件、头文件。单击"确认"按钮后会启动一个创建项目的向导,其中有一页罗列了Qt的多个软件模块,供程序员选择,以和应用程序链接。我们暂时选择默认配置即可。项目创建完毕后,运行"生成\生成解决方案"对项目进行编译。成功后,执行"调试\开始执行(不调试)",一个标题为"hello"的空白窗口弹出,表明该应用程序运行成功。下面我们来看看Qt是如何实现这个简单程序的。
从VS 2010的解决方案浏览器可以看到Qt插件为我们创建了源文件(source files)hello.cpp,main.cpp,头文件(header files)hello.h、资源文件(resource files)hello.qrc,以及若干生成文件(generated files)。目前,我们不必弄清楚每个文件、每一行的含义,我们只关心其中部分内容。hello.h的主要内容如下。
- #include <QtGui/QMainWindow> ①
- #include "ui_hello.h"
- class hello : public QMainWindow ②
- {
- Q_OBJECT
- public:
- hello(QWidget *parent = 0, Qt::WFlags flags = 0);
- ~hello();
- private:
- Ui::helloClass ui;
- };
由于该头文件使用了类QMainWindow,所以行①包含了头文件QMainWindow。Qt的每个类均对应着一个与该类同名的头文件。行②从类QMainWindow派生新类hello。类QMainWindow实现了一个应用程序主窗口的功能。它能够在操作系统的图形环境中显示自己,接收鼠标、键盘等消息进行处理。菜单、滚动条等部件常常作为子对象,被添加到该类的对象中。
用户在声明类hello时用到了宏Q_OBJECT,应该将声明该类的头文件hello.h加入到VS 2010项目的"Header Files"部分,否则将产生编译错误,具体原因我们将在17.2中阐述。
项目中main.cpp的内容如下。
- #include "hello.h"
- #include <QtGui/QApplication>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv); ③
- hello w; ④
- w.show(); ⑤
- return a.exec(); ⑥
- }
行③定义了一个QApplication对象,用于管理程序命令行等信息。行④定义一个hello对象,行⑤显示该对象。行⑥启动Qt的事件处理机制,处理用户的鼠标输入、键盘输入等事件。
4.Qt文档。Qt软件包提供了丰富的文档,介绍Qt库中各个类的用法、Qt开发环境(比如Qt Creator)的用法等内容。这些文档存放在目录d:\qtsdk\documentation下。为了阅读这些文档,读者应该运行"Qt助手",也就是q:\bin目录下的assistant.exe,然后执行"编辑\首选项\文档\添加",选择d:\qtsdk\documentation目录下的某个文件,比如介绍Qt库用法的qt.qch,以阅读该文件内容。