实际上,QT不仅仅是一个巨大的程序库,而是7个程序库,还包括许多使用工具,qmake是其中的一个。如今,术语GUI工具包代表的东西的用途不再仅仅是系统提供的那么一个小部分(GUI界面)。尤其是QT,包含了用于应用程序开发的许多方面的扩展类。其中很多类与程序图形界面相关,但也有很多类涉及到网络编程,OpenGL支持,XML开发等方面。广泛的用途依赖于QT类的平台独立性:除了很少的例外,在所有的操作系统上,所有的类都可用,并且同样的类具有同样的方法和行为。
QT4包含下列程序库:
QtCore包含没有GUI界面的基础类。
QtGui包含GUI基础类。
QtNetwork包含网络类。
QtOpenGL包含OpenGL支持。
QtSql包含SQL数据库类。
QtXml包含XML和DOM类。(参见第45页)
QtAssistantClient允许你使用QT助手作为你的程序的文档浏览器。
Qt3Support包含为保证对QT3向下兼容的类。
Qt 4.1增加了QtSvg库,哟提供对SVG向量图形格式的支持,还增加了QtTest库,也被称作QTestLib,包括单元测试框架。
在Qt 4.2最终版中,奇趣公司增加了QtDBus模块,用于支持Freedesktop.org的公共信息系统(DBus)。
你可能需要将程序代码连接至多个库文件,用得最多的是QtCore和QtGui。因此,qmake默认包含这两个库。
需要连接的库文件由qmake的变量QT指定。默认包含变量core和gui。例如,要开发一个有网络支持的图形界面程序,你应该将值network添加到QT变量。即在工程文件.pro中添加这样的一行:
QT += network
要编写一个支持XML的控制台程序,只需要链接QtCore和QtXml,不需要QtGui,所以你必须添加值xml并且移除值gui。工程文件中添加如下两行:
QT -= gui
QT += xml
如果要使用Qt 4.0中的所有库文件,这样写:
QT += network opengl sql xml support(core和gui默认包含,不需要写)
除了在工程文件中指定之外,还有另外一个关于Qt库知识的特别有用的主题。除了定义类的独立头文件之外(这些头文件的文件名和它们描述的类的名字一致),QT也为它的程序库提供了头文件。这些文件中的每一个都包含了一个库的许多类文件的接口描述。因此,从本书开始到目前为止的所有例子中(我们都仅仅使用了QtGui中的类),我们没有写很多单个的#include声明,而只是简单的这样写:
#include
然而,这些库的头文件通常非常长,明显减慢了编译过程,写成较好。如果编译器支持预编译头文件,这将不是一个问题,但是只有最近的编译器才支持(如GCC3.4以上的版本)。
基础库QtCore
QtCore是每个Q程序都必不可少的一个库。除了其它的,它提供了下面的功能:
基本数据类型,如QString和QByteArray
基本数据结构,如QList, QVector和QHash
输入输出类,如QIODevice, QTextStream和QFile
支持多线程编程的类(包括QWaitCondition和QThread)
基础类QObject和QCoreApplication(QApplication类的基类)
这些类都不依赖于GUI组件。独立于GUI使得Qt程序可以不使用GUI界面(如控制台程序)。
在非图形界面程序中,QCoreApplication承担了QApplication在图形界面程序中的职责:负责事件循环。如果你需要在网络连接中使用多线程的异步通信,就会发现这很有用。
图形界面库QtGui
QtGui库包含所有图形用户界面编程必须的类文件:
QWidget类和它的子类,如QLabel和QPushButton等
布局类(包括QVBoxLayout, QHBoxLayout和QGridLayout)
用于给程序添加菜单的类,如QMainWindow和QMenu
用于绘图的类,如QPainter, QPen和QBrush
提供现成的对话框的类(包括QFileDialog和QPrintDialog)
QApplication类
QtGui库依赖于QtCore库
网络库QtNetwork
QtNetwork库提供了部分编写网络应用程序需要的类。除了通过QTcpSocket和QUdpSocket类支持简单的套接字通信之外,网络库还通过QHttp和QFtp.支持CS(客户机-服务器)的HTTP和FTP连接。
和QtGui不同的是,QtNetwork依赖于QtCore库,但是它也可以与QtGui和其它库一起使用。
OpenGL支持库QtOpenGL
QtOpenGL库支持在Qt程序中使用OpenGL。它提供了QGLWidget类——一个Qt窗口部件,在其中你可以使用OpenGL指令绘图。QtOpenGL依赖于QtCore和QtGui库。
数据库类QtSql
QtSql库提供Qt程序中访问SQL数据库的能力。这个库包含用于建立SQL数据库连接以及查询和修改数据的类。Qt支持的SQL数据范围包括:开源数据库PostgreSQL, MySQL和SQLite。QtSql依赖于QtCore库,我们将在第九章深入讨论。
XML库QtXml
QtXML库提供了一个简易的,非验证的XML解析器。它通过SAX2(Simple API for XML)接口实现这个功能。
QtXml也包含DOM标准(Document Object Model 文档对象模型)的一个实现。相应的类允许你解析XML文档,操纵树结构,以XML文档格式发布修改过的文档,或者使用DOM创建一个新的XML文档。
这个库依赖于QtCore库,我们将在第十三章深入讨论。
Qt3兼容库Qt3Support
与前任Qt 3相比,Qt 4 的变化相当大:一些类包含的改进与Qt 3版本不兼容,还有一些类在Qt 4中被全新的不同名字的类取代。为了简化Qt 3程序移植到Qt 4的工作,奇趣公司在Qt3Support库中提供了相应的Qt 3的类。然而,在新程序中你不应该使用这个库,因为这些类已经停止开发了。因为这本书讲述Qt 4 编程,我们将不会使用这些类,而且以后也不会讨论它们。
向量图形库QtSvg
W3C发布的基于XML的SVG向量图形格式,具有巨大的潜力。从Qt 4.1版本开始QtSvg库支持SVG规范SVG Basic和SVG Tiny,它们用于显示SVG文件和动画,虽然QtSvg库还不能创建它们,也不能作为将SVG文件当作XML文档通过DOM树操纵它们。
帮助库QtAssistantClient
Qt助手库允许你精确控制Qt助手应用程序。允许你使用它作为你的程序的平台独立的帮助文件浏览器。这个模块的核心是QAssistantClient类。
Qt助手使用的自定义帮助页面必须是基本的HTML格式,而且必须有一个XML文件用于描述文档结构。
测试库QTestLib
本来QTestLib是在Qt核心发行版之外提供给付费用户的,从Qt 4.1.0版开始被纳入Qt常规发行版。测试库包含用于编写严格的单元测试的工具,涵盖的范围和Java中的JUnit类似。
消息库QtDBus
QtDBus是Linux和类Unix系统上的一个消息协议。例如,Linux硬件抽象层(HAL)和即将发布的KDE4都使用DBus作为进程间通信协议。尽管Windows和Mac OS X的移植版已经存在,但Qt 4.2将只针对Unix系统提供QtDBus库。然而,将来可能会发生变化。
ActiveQt 和迁移类
Windows平台特有的扩展ActiveQt使得可以通过Qt实现ActiveX组件和在Qt程序中使用ActiveX组件。然而,此功能仅仅在商业版的Qt中可用。
奇趣也提供了从基于MFC,Motif和Xt的程序迁移的解决方案。然而,和ActiveQt一样,它们也仅仅作为Qt 4单独的商业插件(Qt Solutions)提供,所以也不会在本书中讨论。
阅读(809) | 评论(0) | 转发(0) |