Qt在VS2008下的安装与编译

说明丗按照电子工业出版社的要求丆书籍《Qt中的C++技术》阐述了如何在Visual Studio 2010上安装、编译Qt。一些用户仍然喜欢使用Visual Studio 2008•C因此丆本文档阐述了如何在该平台上安装、编译Qt 4.7.1。
作者丗南开大学软件学院丆张波丆2012-9-11。
在保留此说明的前提下丆本文档可被自由传播。
2.3Qt库的编译
开发工具的选择。虽然目前支持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下载最新版本的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‐,其中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
金山网镖6‐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 <QtGui>”而不是使用“#include <d:\qt\vc\include\QtGui>”。当编译器看到这个预处理命令时,需要知道去哪个目录寻所包含的头文件,这需要运行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> 的形式来包含子目录QtGui下的头文件QColor.h。一种更简单的做法是将目录q:\include\QtGui也添加到“Include files”部分。这样,Qt应用程序就可以直接使用诸如#include <QColor>的形式来包含子目录下的文件。由于大多数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:www.qtsoftware/downloads/visual‐studio‐add‐in‐beta。为了方便读者,随书光盘含有该软件,存放为 projects\qt\qt‐vs‐addin‐1.。安装过程中选用默认安装参数即可。安装完毕后,运行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 <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的每个类均对应着一个与该类同名的头文件。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 <QtGui/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);  ③
hello w;      ④
w.show();    ⑤
();    ⑥
}
行③定义了一个QApplication对象,用于管理程序命令行等信息。行④定义一个hello对象,行⑤显示该对象。行⑥启动Qt的事件处理机制,处理用户的鼠标输入、键盘输入等事件。
>商洛学院图书馆

本文发布于:2024-09-22 13:41:19,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/292526.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:文件   需要   编译   使用   头文件
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议