Qt 在VS2008下的安装与编译


2.3 Qt 库的编译  开发工具的选择。 虽然目前支持 Qt 开发的工具较多,比如跨平台的 Qt Creator,QDevelop,Eclipse 等, 但是在 Windows 平台上,经过笔者的评测, 微软的 Visual Studio 仍然是最优选择。 为了支持开发者使用 Visual  Studio 开发 Qt 应用程序,Qt 提供了一个插件“ Visual Studio Add‐in”。安装、执行该插件后,开发者在 Visual  Studio 中能方便地创建 Qt 应用程序的项目文件 (扩展名为 “.vcproj”),也能把 Qt 项目文件 (扩展名为 “.pro”) 转换为 Visual Studio 的项目文件。   在最近的 Windows 版本(比如 Windows Vista,Windows 7)上安装 Visual Studio 6.0 时会遇到一些问题。 为了回避这些问题,本书采用了 Visual Studio 2008(以下简称为 VS 2008)。  Qt 版本的选择。截至本书截稿时, Qt 库仍处于不断地改良、更新过程中,读者可从其官方网站 qt.nokia.com 下载最新版本的 Qt 库。本书采用的是 2010 年 5 月发布的 Qt  4.7.1。由于 Qt 的各个版本会有 细微的差别, 可能导致本书中的某些例子无法和更高版本的 Qt 库链接, 因此,我们建议读者使用 Qt  4.7.1。 为了方便读者,该版本的安装文件被刻录在本书配套光盘 Z:\projects\qt 目录下。  Qt 软件包的安装 。老版本 的 Qt 没有直接提供在 VS 2008 环境下编程所需要的库文件,需要用户使用 VS  2008 重新编译 Qt 的源代码以生成所需要的库文件。这个过程不但费时,而且可能出错。而 Qt 4.7.1 版本则 直接提供了库文件,简化了安装过程。我们可以按照以下步骤配置 Qt 的开发环境。   1.  安装 VS 2008,比如到默认的 C:\Program Files\Microsoft Visual Studio 9.0 目录下。  2.  获取并安装 Qt 软件包。截止到 2011 年 2 月 22 日,Windows 平台上最新版的 Qt 软件包为 2010 年 5 月发布的 qt‐sdk‐win‐opensource‐2010.05.exe,其中 Qt 库的版本为 4.7.1。读者可以从 Qt 的官方网站下载该 软件包。为了方便读者,该软件包被刻录在随书光盘 projects\qt 目录下,读者可以直接双击运行。该软件 包运行时需要用户输入目标路径。本书设该路径为 d:\qt\4.7.1。  安装完毕后, Qt 4.7.1 的库文件存放在 D:\qt\4.7.1\lib 目录下, 头文件存放在 D:\qt\4.7.1\include 目录下, 可执行程序(比如 Qt  Assistant)以及动态链接库(扩展名为 DLL)存放在 D:\qt\4.7.1\bin 目录下。Qt  4.7.1 的库文件可以供 VS 2008 的 C++程序直接使用, 没有必要像老版本那样需要使用 VS 2008 的编译器对 Qt 的源 代码重新进行编译。因此,进行到这个步骤,我们可以直接在 VS 2008 中编写 Qt 应用程序了。当然,为了 能够更方便地在 VS 2008 中开发 Qt 应用程序,我们也可以使用 2.4 节介绍工具 Qt Visual Studio Add‐in。  由于 Qt  4.7.1 软件包已经包含了 VS  2008 编译生成的库文件,一般情况下我们不需要重新编译 Qt 源代 码。然而,在某些场合下我们需要重新编译 Qt 库。例如本书 8.3 节在讨论 Qt 应用程序的二进制代码兼容问 题时就需要重新编译 Qt 库。这是一项耗时的工作,以下是具体的步骤。     3.  复制 Qt 软件包。本书 8.3 节会本着试验的目的修改 Qt 的源代码。完成试验后我们应该复原 Qt 的源 代码。Qt  4.7.1 的所有文件都存放在目录 d:\qt\4.7.1 下。为了能够精确复原 Qt 的源代码,我们令该目录为 原始目录, 不会对其进行任何修改。 做实验时, 该目录下的内容会被复制到一个工作目录, 本书设为 D:\qt\vc, 其中的内容可以被修改。当我们想复原 Qt 源代码时,只需要将原始目录中的文件复制到工作目录即可。由 于原始目录中含有大约 3.6 万个文件,这个复制操作需要运行一段时间。我们可以使用 Windows 的资源管 理器来完成这个复制操作,也可以使用命令   xcopy d:\qt\4.7.1  d:\qt\vc  /s  的方式来完成,这种方式可以显示复制的过程。     4.  配置适用于 VS 2008 的环境变量。对 Qt 软件包进行编译时需要以命令行方式使用 VS 2008 的编译器, 这需要配置一些环境变量。用一个文本编辑软件打开文件 C:\Program  Files\Microsoft  Visual  Studio  9.0\Common7\Tools\vsvars32.bat,使环境变量 PATH 包含 d:\qt\vc,INCLUDE 包含 d:\qt\vc\include,LIB 包含 d:\qt\vc\lib。保存该批处理文件后,在命令行窗口运行该批处理文件。随书光盘 projects\qt\vsvars32.bat 是 一个修改后的文件,读者可以参考该文件进行修改。读者也可以直接运行该文件,跳过以上编辑过程。为 了验证是否对上述环境变量做了正确的设置,可以在命令行窗口运行 set 命令,并检查屏幕的输出。   5.  生成供 VS 2008 编译器使用的配置文件。在命令行窗口中,将当前目录切换到 d:\qt\vc,运行   configure  ‐platform  win32‐msvc2008   这个命令将生成一个配置文件,供步骤 6 中的编译程序 nmake 使用。Qt 库由 corelib,GUI,network 等多个 模块组成,上述命令表示即将编译所有模块。如果开发者只需要使用部分模块,可以使用下面的命令略过 其他模块的编译,以节省编译时间:   configure  ‐no‐sql‐sqlite ‐no‐qt3support ‐platform win32‐msvc2008 ‐no‐libtiff   ‐no‐dbus ‐no‐phonon ‐no‐phonon‐backend ‐no‐webkit  该命令表示不编译 sql‐sqlite, qt3support, libtiff, dbus, phonon, phonon‐backend 及 webkit 模块。 configure 命令 运行时会询问 Qt 的版本是商业版还是免费开源版,选择免费开源版。该命令大约运行 10 分钟。   6.  运行 nmake 进行编译。在命令行窗口中,将当前目录切换到 d:\qt\vc,运行命令 nmake,对 Qt 的源代码 进行编译。 该命令大约运行 2~3个小时。 为了验证 Qt库是否已经被正确编译, 用户可以查看目录 D:\qt\vc\lib。 如果该目录包含 qtcore4.lib,qtgui4.lib 等库文件,而且这些库文件的更新时间正好为运行 nmake 命令的时 间,则表示 Qt 库已被成功编译。 编译完毕后 d:\qt\vc 目录占用了大约 10G 的空间, 其中大部分是 .obj 文件。 用户可以在该目录下运行命令“ del *.obj /s”删除这些文件,以节省磁盘空间。缩减后的目录大约占用 2.6G 空间。  2.4 开发环境的设置  在 VS 2008 中开发 Qt 应用程序需要做以下设置。   指定 Qt 库的头文件位置以及库文件 。Qt 应用程序通常以相对路径而不是绝对路径的方式包含 Qt 库的 头文件,比如使用“ #include ”而不是使用“ #include ”。当编译器看到这个 预处理命令时,需要知道去哪个目录寻找所包含的头文件,这需要运行 VS  2008 的菜单项 Visual  Studio  Tools\Options\Projects  and  Solutions\VC++  Directories。在对话框的“ show  directories  for”部分,我们选择 “Include files”以添加 Qt 头文件所在的目录。如果读者计划使用 Qt 4.7.1 本身的库,这些头文件、库文件 位于 d:\qt\4.7.1 目录下。如果读者计划使用自己编译的 Qt 库,这些头文件、库文件位于 d:\qt\vc 目录下。 下面我们以后者为例进行介绍。   对于本书,设我们已经按照 1.4 节所述将目录“ d:\qt\vc”映射为盘符“ q:\”,则所有 Qt 的头文件都存 放在 q:\include 的某一个子目录下。如果我们只是将目录 q:\include 添加到“ Include files”部分,Qt 应用程 序就需要使用诸如 #include   的形式来包含子目录 QtGui 下的头文件 QColor.h。一种更简单的 做法是将目录 q:\include\QtGui 也添加到“Include files”部分。这样, Qt 应用程序就可以直接使用诸如 #include  的形式来包含子目录下的文件。由于大多数 Qt 应用程序都会用到子目录 QtCore 以及 QtGui 下的头 文件,所以我们建议将这两个子目录 (即 q:\include\QtCore,q:\include\QtGui)以及 q:\include 添加到 “Include  files”部分。   Qt 提供了一些例子和演示程序,这些程序被存放在 Qt 安装目录的 examples 和 demos 子目录下。这些 程序的 VS 2008 项目文件以相对路径的方式(比如“ ..\..\include”)来指定 Qt 头文件的所在位置。如果读者 将它们复制到文件系统其它位置进行修改和编译,这些相对路径失效,导致 VS 2008 编译这些程序时出错。 此时应该以绝对路径的方式将这些程序所依赖的头文件添加到“ Include files”部分。  Qt 应用程序必定会调用 Qt 库文件中的函数, VS 2008 链接器需要知道该程序应该和哪些库文件链接。 用户应该首先运行 VS 2008 的菜单项 Visual Studio Tools\Options\Projects and Solutions\VC++ Directories。在对 话框的“ show directories for”部分,我们选择“ Library files”,添加 Qt 库文件所在的目录 d:\qt\vc\lib。然后, 在 VS 2008 中执行菜单 Project\Properties\Configuration Properties\Linker\Input\Additional Dependencies,在编 辑框中输入该程序用到的 Qt 库文件。如果该程序只用到 QtCore 以及 QtGui 模块,应该在编辑框中输入 “qtmaind.lib QtGuid4.lib QtCored4.lib”。  由于 Qt 应用程序在运行的时候需要使用 d:\qt\vc\bin 目录下的动态链接库( DLL 文件),所以用户应该 将该目录加入到 Windows 系统的环境变量 PATH 中。具体地说,执行显示桌面 \我的电脑 \右键\属性\高级\ 环境变量 \系统变量 \PATH,在其末尾加上 d:\qt\vc\bin。  如果用户没有执行这个操作,可能出现的错误情形为:用户能够在 VS2008 环境中执行一个 Qt 应用程 序(因为下文的 Qt Visual Studio Add‐in 会做以上设置) ,而在命令行窗口中无法执行该 Qt 应用程序(因为它 找不到 DLL 文件)。    安装插件 Qt Visual Studio Add‐in。为了便于在 VS 2008 环境下使用 Qt 库,可以从以下地址下载、安装 插件Qt Visual Studio Add‐in:http://www.qtsoftware.com/downloads/visual‐studio‐add‐in‐beta。为了方便读者, 随书光盘含有该软件,存放为   projects\qt\qt‐vs‐addin‐1.1.4.exe。安装过程中选用默认安装参数即可。安装 完毕后,运行 VS 2008,会有一个名为 Qt 的菜单项。执行 Qt Options\Qt Versions\Add,在 Version Name 域 输入任意名字比如 vc,在 Path 域中输入 d:\qt\vc。至此,该 Qt 插件已经和 VS 无缝集成在一起了。     该插件需要 .NET Framework 3.5 SP1。否则,执行菜单命令 Qt\Launch Designer 时,会出现“Method not  found  …”的提示,导致无法使用 Qt  Designer 来快速设计对话框等屏幕控件。如果出现这个问题,解决方 法如下。  1.  卸载 Qt Visual Studio Add‐in。  2.  卸载 Windows 操作系统此前安装的 .NET  Framework。可以从网上下载并使用一个工具软件“ dotnet  framework  cleanup  tool ”进行卸载。为了方便读者,随书光盘含有该软件,存放为 projects\qt\  dotnetfx_cleanup_tool.zip。该步骤需要 10 分钟左右,用户可以点击其 View Log 按钮察看工作过程。   3.  下载、安装 .NET  Framework  3.5  SP1。为方便读者,随书光盘含有该软件,存放为   projects\qt\  dotnetfx35.zip。该步骤需要 20 分钟左右。在开始阶段需要用户的计算机和互联网相连。安装完毕后,重新 启动机器。 用资源管理器打开目录 %systemroot%\Microsoft.NET\Framework。如果其中含有一个子目录 v3.5, 则表明安装成功。    4.  重新安装 Qt Visual Studio Add‐in。    编写测试程序。安装完毕 Qt Visual Studio Add‐in,我们可以尝试在 VS 2008 环境下编写一个小测试程序。 运行 File\New\Project,在弹出的对话框中选择 Qt4 Projects。有多种项目类型可供选择,本书仅涉及其中两 个:(1)Qt Concole Application,即主控台程序。这种类型的程序不使用 Qt GUI 模块的任何类或者函数,运 行时没有图形界面,只有一个能够显示文字的窗口,允许用户通过键盘输入一些信息,程序将运行结果以 文字形式显示在该窗口中。该窗口通常被称为命令行窗口。 (2)Qt Application,即一般的图形界面程序。这 种类型的程序使用 Qt GUI 模块的函数,显示一个具有图形界面的窗口。以上两种类型相互排斥,不要试图 创建一个即具有命令行窗口又具有图形界面窗口的程序。如果一个程序使用了 Qt GUI 模块的任何类或者函 数,就只能创建图形界面程序。 2.5 节将介绍如何创建主控台程序,本节仅介绍如何创建图形界面程序。   在 Name 域输入 hello,在 Location 域输入一个目录名,以存放 Qt 插件自动生成的源文件、头文件。点 击 OK 按钮后会启动一个创建项目的向导,其中有一页罗列了 Qt 的多个软件模块,供程序员选择,以和应 用程序链接。我们暂时选择默认配置即可。项目创建完毕后,运行 Build\Build Solution 对项目进行编译。成 功后,执行 Debug\Debug  Without  Debugging,一个标题为“ hello”的空白窗口弹出,表明该应用程序运行 成功。下面我们来看看 Qt 是如何实现这个简单程序的。   从 VS 2008 的 Solution Explore 中可以看到 Qt 插件为我们创建了源文件 (source files)hello.cpp,main.cpp, 头文件(header files)hello.h,资源文件( resource files)hello.qrc,以及若干生成文件( generated files)。 目前,我们不必弄清楚每个文件、每一行的含义,我们只关心其中部分内容。 hello.h 的主要内容如下。   #include    ①  #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 的每个类均对应着一个 与该类同名的头文件。 Qt 的每个模块有一个汇总的头文件,使用 include 语句包含了与该模块中每个类对应 的头文件。例如, Q:\include\QtGui 目录下的头文件 QtGui 用 include 语句包含了 QtGui 模块几百个类对应的 头文件。一个源程序如果包含了这个汇总头文件,它就间接地包含了这个模块的所有头文件,程序员不必 再写一大堆的 include 语句。但是,如果一个模块的头文件太多,这个做法会增加编译时间。如果一个源文 件中所涉及的 Qt 类的数量不多,我们应该仅包含和这些类对应的头文件,以缩减编译时间。   行②从类 QMainWindow 派生新类 hello。类 QMainWindow 实现了一个应用程序主窗口的功能。它能够 在操作系统的图形环境中显示自己,接收鼠标、键盘等消息进行处理。菜单、滚动条等部件常常作为子对 象,被添加到该类的对象中。   用户在声明类 hello 时用到了宏 Q_OBJECT,应该将声明该类的头文件 hello.h 加入到 VS  2008 项目的 “Header Files”部分,否则将产生编译错误,具体原因我们将在 17.2 中阐述。   项目中 main.cpp 的内容如下。   #include "hello.h"  #include   int main(int argc, char *argv[])  {    QApplication a(argc, argv);   ③    hello w;      ④    w.show();      ⑤    return a.exec();       ⑥  }  行③定义了一个 QApplication 对象,用于管理程序命令行等信息。行④定义一个 hello 对象,行⑤显示该对 象。行⑥启动 Qt 的事件处理机制,处理用户的鼠标输入、键盘输入等事件。       
还剩3页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

clc3

贡献于2013-07-08

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf