精通Qt4编程(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-19 20:21:02

点击下载

作者:蔡志明,卢传富,等

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

精通Qt4编程(第2版)

精通Qt4编程(第2版)试读:

前言

本书第1版出版已近三年了,其间Qt也发生了较大的变化。最重要的就是Trolltech公司被Nokia收购,由此改变了Qt发展的趋势。Qt走向了更为开放,功能更丰富,支持的平台更多的道路。

Qt新特点

归纳起来有以下几点:

1.支持LGPL(GNU Lesser General Public License)协议。

我们知道,当一个自由软件使用GPL声明时,该软件的使用者有权重新发布、修改该软件,并得到该软件的源代码;但只要使用者在其程序中使用了该自由软件,或者是使用修改后的软件,那么使用者的程序也必须公布其源代码,同时允许别人发布、修改。也就是说,使用GPL声明下的自由软件开发出来的新软件也一定是自由软件。LGPL是GPL的变种,与 GPL的最大不同是,可以私有使用LGPL授权的自由软件,开发出来的新软件可以是私有的而不需要是自由软件。Qt支持LGPL协议后,用户使用开源版Qt获得了更大的自由度。

2.开放了Qt源代码库,并鼓励社区参与。

以前Qt虽是开源代码,但源码库并未开放,现在在http://qt.gitorious.org/可以自由地访问Qt源码库,并可以为Qt做出自己的贡献。Qt的源码库使用分布式版本控制系统Git管理,也可以通过浏览器浏览。这里有Qt,Qt Creator,Qt Jambi等多个项目等着您的参与!开放源代码库,拉近了Qt开发者与用户之间的距离。

3.彻底开放了原来商业平台的代码。

原来只能在商业版中使用的ActiveQt,Oracle数据库驱动等,现在都能在开源版中使用。开源版和商业版不再是两个源码不同的版本,只是遵守的协议不同而已。开源版用户终于能享受全功能Qt了。同时在Windows平台上也开放了Visual Studio插件和相应支持,开源版用户在Windows上除使用MinGW开发外又多了一项选择,使用Visual Studio开发Qt应用。

4.对嵌入式平台支持力度加大。

Qt除了继续支持嵌入式Linux平台外,增加了对Windows CE,Symbian,Maemo 5等嵌入式平台的支持。与此同时,推出了Qt Mobility软件包,对手机上的GPS设备、多媒体、短信、电话等功能提供了较完善的支持,让用户开发手机应用更为便利。同时Qt还对实时操作系统VxWorks和QNX提供了社区支持,为平淡无奇的嵌入式图形系统打了一剂强心针。

5.最后就是不断添加到Qt软件包中的功能,并行计算框架、动画框架、状态机框架、多媒体框架等几个框架为Qt增色不少。

浏览器、XQuery、XPATH、XSLT、多点触摸、图形效果支持提升了Qt的能力。当然还有其他功能和性能改进不能一一列出,这都使得Qt 4走向了成熟。Qt 4.7中更是引入了类似于Windows ZAML的声明式UI编程的功能,该功能命名为Qt Quick。

总之,在几年前,我们还需要向周围的人介绍什么是Qt,如今只需要对如何更好地应用Qt进行交流。在国内图书市场上,也出现了为数不少Qt相关的书籍。为了与时俱进,本书也根据新版的Qt 4.7 进行了修改,推出了第2版,但本版中不包括Qt Quick编程介绍。

本书的结构

本书共25章,每章讨论一个专题。章节安排上基本采用循序渐进、由浅到深的原则。但最后的高级篇中的章节没有很强的关联,可以按照随意的顺序阅读。每章内容及作者分述如下:续表

如何获取源代码

由于Qt是跨平台的,因此书中的内容应用能够在Windows、Linux、UNIX和Mac OS上运行,书中的程序可能在下列平台之一上编写:Windows XP/Vista、Linux(OpenSuSE、Fedora Core等)。因此书中的屏幕截图可能来源于其中的任何一种操作系统。

要获取本书的源代码,可以访问博文视点资讯有限公司网站获取:

http://www.broadview.com.cn。

致谢

与电子工业出版社孙学瑛编辑是第二次合作了,孙编辑对本书的关心和认真细致的工作,使本书能够及时出版,再次表示诚挚的谢意。

问题反馈

欢迎广大读者和专家对本书提出建议和批评。如果您认为书有错误或对我们有什么建议,可以联系jsj@phei.com.cn。

蔡志明 卢传富 李立夏

2010年9月30日于武汉初级篇第1章 Qt初步实践

作为Qt程序开发之旅的第一站,本章将阐述如何使用Qt开发一个简单的GUI用户界面程序。在这一章,将学习如何建立Qt主程序、建立qmake工程,还将接触到“信号(signal)”和“槽(slot)”以及“Qt布局”等基本概念。随着学习的不断深入,将在第3章和第5章对这些概念进行深入的讲解,并演示它们在GUI用户界面设计中的应用。1.1 第一个Qt程序

在这一节,学习创建第一个较简单的Qt应用程序。在这个程序中,用户界面将显示一行中文“同一个世界,同一个梦想!”通过这个程序,将学会使用两种手段建立Qt应用程序:KDevelop集成开发环境和vim编辑器。1.1.1 建立主程序

首先,看一下第一个Qt GUI应用程序hello的源代码,其内容如下所示(为了便于读者查阅相关源代码,代码的第一行注释了该文件在源代码中的路径)。

这个程序的功能是在一个窗口中显示“同一个世界,同一个梦想!”,运行效果如图1-1所示。图1-1 第一个Qt程序

注意

窗口(Window)和窗口部件(Widget)

本书中,多次使用了窗口和窗口部件的概念。把一个图形用户界面称为窗口,它往往具有标题栏、窗口边框(frame)、能够通过鼠标拖动和改变大小等特性,最典型的窗口就是对话框。例如,第一个Qt应用程序的用户界面就是一个窗口。当文中使用窗口的时候,就是特指这种情况。

一般的,窗口部件是对所有图形用户界面的统称,它既可以作为单独的窗口出现,也可以出现在一个窗口的内部。1.1.2 建立工程

现在暂不分析第一个Qt应用程序是如何运行的,而是先为它建立qmake工程,然后进行调试和运行。

在Linux系统中,可以有多种方法输入、编辑上述Qt程序,此处将使用vim文本编辑器和KDevelop工具建立上述主程序。

1.在vim中建立Qt应用程序

在vim中建立Qt应用程序,步骤如下(如果读者觉得在vim文本编辑器中编辑、调试以及运行Qt应用程序比较麻烦,可以直接跳过这一部分,而选择在KDevelop集成开发环境中建立该Qt应用程序):

打开控制台程序konsole,将当前目录切换到相应的路径下,执行控制台命令“mkdir hello”建立hello目录,执行“cd hello”命令进入该目录。

在控制台执行“vim hello.cpp”命令(如果文件hello.cpp已经存在,则打开文件;否则新建hello.cpp文件),打开vim文本编辑器。

进入vim编辑器后按“i”键(即打开vim编辑器的修改编辑功能),然后输入第一个Qt应用程序hello的源代码。

按Esc键,退出vim文本编辑器的编辑功能。

最后,在vim文本编辑器的命令行输入命令“:wq”,按回车键后vim将保存文件并退出。

现在,第一个Qt应用程序hello已经输入到vim文本编辑器中了。关于vim编辑器的使用读者可查阅相关帮助文档,在此不再赘述。

2.在KDevelop中建立Qt应用程序

KDevelop是集编辑、编译、调试和运行C++程序等诸工具于一身的应用程序集成开发环境。在KDevelop中建立Qt应用程序并进行编译、调试、运行都是比较简单的,但需要建立KDevelop工程(这和使用VC++进行应用程序开发是类似的),对于初学者来说过程有些复杂。具体步骤如下:

打开KDevelop后,选择菜单“工程”|“新建工程”,如图1-2所示。

在“建立新工程”对话框的“所有工程”选项卡中,选择“C++|QMake project|Basic Qt 4 Application”,选择或者输入存放位置(例如,“/home/lcf/book/chapter01”),输入应用程序名称“hello”(KDevelop将会在/home/lcf/book/chapter01/路径下建立hello目录),单击“下一步”按钮,如图1-3所示。

设置“工程选项”,在此输入Qt 4的qmake和Qt设计器的绝对路径,直接单击“下一步”按钮,如图1-4所示。

设置“版本控制系统”,略过,单击“下一步”按钮,如图1-5所示。图1-2 新建KDevelop工程图1-3 建立hello工程图1-4 设置工程选项图1-5 设置版本控制

在“h文件的模板”选项(如图1-6所示)中,可以设置头文件.h的格式(在此省略);单击“下一步”按钮进入“cpp文件的模板”选项卡(如图1-7所示),与“h文件的模板”类似。

最后,单击“完成”按钮,KDevelop会自动生成一个标准的C++主程序。在此,编辑修改为第一个Qt应用程序hello的源代码,如图1-8所示。图1-6 设置头文件模板图1-7 设置实现文件模板图1-8 第一个KDevelop工程

到此,在KDevelop中已经建立了一个KDevelop工程,并且输入了第一个Qt应用程序hello。接下来,建立Qt应用程序的qmake工程文件。

有两种方法建立qmake工程:自动生成和手动建立。下面分别描述如何使用这两种方法建立应用程序hello的qmake工程。

3.自动建立qmake工程

对于比较简单的小应用程序,使用qmake命令自动建立的qmake工程完全可以满足需要。

前面,已经在vim文本编辑器中输入了第一个Qt应用程序hello的源代码,现在为它建立相应的qmake工程。

首先,在控制台konsole中将当前目录切换到hello.cpp文件所在的目录,运行“qmake –project”命令。此时Qt的qmake工具将在当前目录下自动生成应用程序hello的工程文件hello.pro,其内容如下。

下面分析一下这个qmake工程文件。

前3行文本是qmake工具自动添加的注释文本,它描述了该qmake工程文件是由qmake工具自动生成的,以及文件生成的时间和qmake工具的版本号。

变量TEMPLATE描述了为建立目标文件而采用何种模板,即生成何种形式的Makefile文件。qmake工具定义了5种模板:

● 应用程序app,为建立一个Qt应用程序创建Makefile文件;

● 库lib,为建立应用程序库而创建Makefile文件;

● 子工程 subdirs,为建立子目录下的目标文件创建一个 Makefile 文件,子目录通过变量SUBDIRS指定(子目录下的工程文件也需要指出使用何种模板);

● VC应用程序vcapp,为Visual Studio生成一个应用程序工程,仅仅用于Windows操作系统。

● VC库vclib,为Visual Studio生成一个应用程序库工程,仅仅用于Windows操作系统。

由于第一个Qt程序是一个可直接执行的应用程序,因此采用“应用程序app”模板。

变量TARGET描述了目标文件的名称,即生成的应用程序的名字。qmake工具自动生成的qmake工程文件采用默认方式(TARGET的值为空),即应用程序的名字采用工程文件hello.pro所在的文件夹的名字hello。

变量DEPENDPATH描述了建立应用程序所依赖的其他文件所在的路径。hello.pro工程文件中将该值设置为当前目录。

变量INCLUDEPATH描述了编译该工程时编译器需要搜索的#include路径。hello.pro工程文件中将该值设置为当前目录。

变量SOURCES选项告诉编译器,源代码文件的路径(相对于工程文件hello.pro的位置)及其文件名字。应用程序hello比较简单,只包含一个hello.cpp源文件。

现在,在KDevelop中建立qmake工程文件。

事实上,在KDevelop中建立KDevelop工程的时候,KDevelop会在约定的目录下建立了一个与应用程序同名的hello目录,它的主要目录结构如图1-9所示。

其中,

● bin 目录存放可执行的目标文件;

● src目录存放源文件(包括qmake工程文件src.pro以及资源文件等);

● templates目录存放KDevelop生成源文件.cpp和头文件.h时使用的模板;

● hello 目录下的其他文件都是关于 KDevelop 工程的(hello.pro是自动生成的qmake工程文件)。图1-9 第一个Qt程序的目录结构

可以看到,KDevelop在上面的目录结构中生成了两个qmake工程文件:hello目录下的hello.pro主工程文件和hello/src目录下的src.pro子工程文件。

主工程文件hello.pro的内容如下。

第1行的TEMPLATE变量的值为subdirs,表示hello.pro工程在子文件夹中还包含子工程。子工程文件所在的目录由第2行SUBDIRS变量指定。在运行qmake生成Makefile文件的时候,qmake工具会根据主工程hello.pro中的SUBDIRS选项自动到相应的目录下寻找src.pro子工程文件,qmake工具将联合两个工程文件分别生成两个前后相关的Makefile文件。

qmake子工程文件src.pro的内容如下。

该工程文件中,大多数变量(或选项)采用了默认值,仅仅定义了SOURCES和TARGET工程选项,在此不再详述。

注意

工程文件中的源文件.cpp和头文件.h的位置,既可以采用绝对路径表示,也可以采用相对路径表示。相对路径意味着源文件或头文件相对于工程文件.pro所在目录的路径。例如,在第一个Qt应用程序的例子中,src.pro工程文件在./hello/src目录下,hello.cpp源文件也在./hello/src目录下。那么采用相对路径时,工程文件src.pro的选项SOURCES的值为:

./hello.cpp(或 hello.cp)

而采用绝对路径时,则值为:

/src/hello.cpp

其他工程选项也是类似的,比如src.pro工程文件中的TARGET变量值为../bin/hello,表示目标文件将被放置在/bin 目录下面。

4.手动建立qmake工程

建立较大型Qt应用程序时,使用qmake工具生成的qmake工程文件将无法满足编程的需要。尽管qmake工具生成的工程文件完全可以满足hello程序的编译需求,但作为一个例子,笔者生成了一个对应于vim输入的源代码文件的较简单的hello.pro文件,它位于hello目录下。其内容如下:

下面,简单地分析一下这个工程文件。

● 变量TARGET定义了可执行目标文件的名字为hello。

● 变量DESTDIR定义了存放可执行目标文件hello的路径,即在hello目录下。

● 变量CONFIG定义了编译选项,即:

debug表示建立的目标代码是调试版本(相对于release发布版本);

warn_on要求编译器在编译应用程序时打开警告开关。

● 变量 OBJECTS_DIR 描述了编译/连接应用程序过程中产生的中间文件存放的位置,即将编译器生成的中间文件hello.o放置在工程文件所在目录的tmp子目录下(hello/tmp)。

在为应用程序hello 建立qmake工程后,就可以编译运行第一个Qt应用程序了。1.1.3 编译/运行第一个Qt应用程序

下面,通过两种方式编译、运行第一个Qt应用程序。

在控制台模式下,依次在工程文件所在的目录下执行下述命令:

● qmake,生成Makefile文件;

● make,编译、连接并生成可执行代码;

●./hello,执行应用程序。

在KDevelop中,编译、运行Qt应用程序的步骤如下:

在右侧“QMake管理器”选项卡的“src”子工程下单击右键,选择菜单命令“运行qmake”,建立Makefile文件,如图1-10所示。

选择“编译”菜单中的“编译工程”命令(或单击工具栏中的“编辑工程”工具按钮),编译、连接Qt程序,如图1-11所示。

选择“编译”菜单中的“执行主程序”命令(或单击工具栏中的“执行主程序”工具按钮),运行hello程序。应用程序的运行效果如图1-12所示。图1-10 KDevelop中运行qmake图1-11 执行编辑工程命令图1-12 第一个Qt程序运行效果1.1.4 第一个Qt程序的代码分析

现在再回过头来逐行地分析一下源代码,看看第一个Qt应用程序是如何运行的。

这是一个非常简单的Qt应用程序,它不包含任何自定义的类,且仅仅有一个hello.cpp主程序文件。

首先包含必要的Qt类的头文件。

●#include表示包含Qt的应用程序类QApplication的头文件,其中的QtGui 表示Qt的QtGui模块,从目录结构来讲,QtGui是文件夹。是Qt定义QApplication类的头文件(与类名相同);QApplication类是每一个Qt GUI应用程序所必需的。

●#include将Qt的基础窗口部件QWidget的定义包含进来;接下来的#include将Qt的标签QLabel头文件包含进来。事实上,QLabel头文件中已经包含了QWidget的定义,因此也可以去掉对QWidget头文件的包含。

●#include用于包含 QtCore 模块下的 QTextCodec 类的头文件。类QtextCodec封装定义了显示文本(例如,“同一个世界,同一个梦想”)字符集的转化功能。

扩展阅读

Qt4定义了多个模块,每个模块包含相对独立的库文件并实现各自相应的功能。Qt4的软件开发模块有:

● QtCore,Qt4的基本模块,定义了其他模块使用的Qt 核心的非GUI类,所有其他的模块都依赖于该模块。

● QtGui,定义了图形用户界面类。

● QtMultimedia,提供了对低级多媒体编程的支持。

● QtNetwork,定义了Qt的网络编程类。

● QtOpenGL,定义了OpenGL的支持类。

● QtOpenVG,定义了对OpenVG的支持类。

● QtScript,该模块提供了对脚本的支持。

● QtScriptTools,脚本调试器。

● QtSql,定义了访问数据库的类。

● QtSvg,定义了显示和生成SVG(Scalable Vector Graphics)类。

● QtWebkit,定义了显示和编辑Web内容的类型。

● QtXml,定义了处理XML(eXtensible Markup Language)语言的类。

● QtXmlPatters,为XML和自定义数据模型提供了XQuery和XPath引擎。

● QtDeclarative,声明式UI引擎。

● Phono,多媒体框架。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载