• 9685阅读
  • 1回复

【原创】【编著】【技术专题】初揭面纱(全文) [复制链接]

上一主题 下一主题
离线fanyu
 
只看楼主 倒序阅读 楼主  发表于: 2005-09-06
初揭面纱
本文简单介绍了Qt的历史和特点,并引导读者完成Qt的安装。
关键词:Qt KDE 安装方法
  Qt是挪威Trolltech公司开发的面向对象、高度封装的跨平台C++图形用户界面应用软件框架,它为用户提供了一个开发商业级别、多平台应用软件的环境。Qt始设计于1992年,当时还不过是几个程序员为了方便程序的编写与维护而开发的一些程序集。1994 年,开发者们建立了Trolltech公司,1995 年发布了Qt的第一个商业版本。之后, 如同Linux的发展一样,Qt逐渐变得羽翼丰满。在中国,Trolltech公司在2001 年6月与红旗公司签订了协议,共同致力于在手持设备上使用Qt进行应用软件的开发;另一家大腕——台湾威盛也使用Qt 的嵌入式版本在嵌入式平台上进行相关软件的开发。在国外,挪威的PGS石油与天然气公司在考察了多家公司的跨平台产品(包括Java)之后选择了Qt进行数据处理软件的开发, 该公司有超过2000台的终端用于各种数据的采集、分析与处理。以下是该公司使用Qt开发的软件中的一个快照:
  现在全球已经有超过45个国家的数以千计的程序员使用Qt开发各种软件。Qt的版本众多,可分为两大家族:桌面平台家族与嵌入式平台家族。前者又包括以下三个平台:l Windows平台,包括Windows 95/98/ME、NT4、2000
和XP。2 X11平台,包括Linux、Solaris、HP-UX、Irix、AIX以及其他一些Unix的变种。3 Mac平台。后者运行于嵌入式Linux 内核之上,精简与优化了各种图形操作,程序运行时无需X11与motif系统的支持,这样可有效减少内存消耗与CPU负担。对于用户来说,桌面家族和嵌入式家族所调用的函数与类是一致的,这样当你移植一个系统时所做的改动就很少,甚至只需重新编译。Qt与Java同属跨平台的开发工具,但原理却完全不同:Qt的跨平台特征是在代码级实现而非运行级,不同的平台需要单独编译,因此也不需要什么虚拟机。如果说Java是“一次编译,到处运
行”的话,Qt就是“一次编码,到处编译”。这种差异导致的结果是Qt开发的程序运行效率要高于Java开发的程序,可以用于工控等有实时性要求的场合。在这里也顺便提一下另外两个使用较广泛的跨平台开发工具:Kylix和wxWindows。前者是Borland公司的力作,在功能上相当于Delphi for Linux。为了使代码能跨平台编译,Borland新开发了一种组件CLX,即交叉平台控件库(Component Library Cross-Platform )。巧的是Qt被选择作为CLX的基础,因此两者有着亲密的血缘关系。可惜Kylix上的开发语言是pascal 语言, 这对于C/C++的爱好者来说难免有点失望了。wxWindows(官方站点www.wxwindows.org)同Qt比较类似,也是一个跨平台的C++开发架构,自身也不带编译器。它最初起源于英国爱丁堡大学的人工智能研究所,93年发布了第一个公开版本,支持Windows、Unix 和MAC平台,目前由一个非赢利目的的民间团体进行开发、升级与维护,源码开放,功能也比较完整。但可能是由于它的非赢利性导致投入也不是很多吧,感觉在整体的健壮性、易用性和性能上还是和Qt有着一定的差距。对于同一种平台Qt亦分不同级别,如免费版,专业版与企业版。免费版仅用于开发源码开放的自由软件,不能用于商业
软件的开发,Windows下最新的免费版还有时间限制;专业版与企业版可用于开发商业软件,但需付费购买。截止2002年1月8 日,Qt的最新Windows商业版本为3.0.1版,最新免费非商业版本为2.3版(本次专题中的程序即用2.3版开发)。最新Unix版本是3.0版。
    用过Linux的用户都知道,Linux发行商一般提供两套图形管理程序,一个是KDE,另一个是gnome。其他的GUI还有一些,但以这两个为主。KDE就是以Qt为基础设计的一套管理器。由于Trolltech是一个商业公司,因此Qt并不完全按GPL的准则发行,最初发行Qt时源代码是不公开的。这导致了部分Linux 开发者的反感,他们决定重新设计一个图形管理器与KDE抗衡,这也就是gnome的由来。现在Qt通过三种许可协议发放:1、商业开发,使用对象是开发商用软件的程序员。2、教学专用,使用对象是用来教学Qt的各个学院、大学。3 、GPL,使用对象是自由软件的开发者。用收费差异来衡量的话,就是企业版、专业版与免费版。其中X11平台下的各个版本都提供源代码;Windows平台下只有企业版与专业版提供源代码,且各版本并不同步,例如当前的最新版本为3.0版, 但Windows免费版本是2.3版。
Qt的特征包括以下几点:
1.数据库编程
Qt 3.0内建了一组独立于各平台和数据库的API,专门用来调用SQL数据库,这组API为Oracle、PostgreSQL以及MySQL提供ODBC以及特殊数据库驱动程序支持。Qt 3.0内置GUI和底层数据库同步的数据检测支持功能,使得后台数据的更改与前端界面的刷新同步,而Qt Designer亦支持这些新的控制功能,为数据库提供应用软件快速开发工具(RAD)解决方案。
2.Qt Designer
Qt Designer是一个全功能的图形用户界面开发工具,与Delphi的界面有点相似。它支持包括菜单和工具栏的应用软件主窗口的交互式设计,并且完全支持可定制模式的窗口控件。此外,Qt Designer还内置了C++编辑器,允许用户在RAD环境中直接编辑源代码。
3.Qt Linguist
Qt Linguist是一个本地化工具,能够让用户把基于Qt开发的程序从一种语言简单、智能地转变成另外一个语言,适合于开发国际版软件。它能够把程序中所有可见的文本转换成任何支持统一字符编码标准(Unicode)和指定平台的语言,它最主要的特征是一个适应特殊目的的编辑工具和多语言术语智能数据库。一旦完成新的翻译,数据库将保存这些术语,以便以后再次使用。此外,Qt Linguist还完全支持Unicode 3。
4.Qt Assistant
Qt Assistant是Qt 3.0提供的一个独立应用软件,它能够浏览Qt的类文档、Qt Designer和Qt Linguist手册。此外,它还提供了目录检索、内容纵览、书签、历史记录以及在页面内搜索等功能,功能上类似于微软的MSDN。
5.国际化文本显示
即使是在系统没有安装Unicode字体的情况下,Qt 3.0也支持多内码混合的文本。同时它亦支持从右至左以及从上至下型的语言,像阿拉伯语(Arabic)和希伯来语(Hebrew)。
6.支持HTTP和FTP网络协议
Qt 3.0的网络编程模块提供一个通过HTTP协议交换数据的API(以前版本已经实现FTP协议)。
7.支持多显示器
Qt 3.0允许应用软件支持多个显示器。在Unix平台上,Qt3.0支持Xinerama和传统的多显示器技术,而Windows平台上则是Windows 98和2000支持的虚拟桌面技术。Qt 3.0提供一个独立于系统平台的API以实现上述技术。
8.新的组件模型
这个特征类似于Windows下的COM(虽然COM也号称平台无关,但目前似乎仅在Windows平台上应用),Qt 3.0提供一
个独立于系统平台的API,以现实共享库加载等功能。
9.美观的GUI界面实现
Qt 3.0支持浮动窗口,扩展了风格引擎,支持大量的标准窗口部件, 包括进度显示条(p r o g r e s s b a r ) , 旋转框(spinbox)以及表格标题(table header)等。此外,它还为交互式文本编辑增加了图形界面控制。
10.可接近性支持
Qt可控制与提供有关可接近性体系结构的信息,通过Qt提供的标准工具可开发视觉或肢体残疾用户使用的应用软件(例如 Windows Magnifier和Narrator)。
11.64位安全
Qt 3.0支持即将推出的最新一代64位硬件。

Qt的类库数量很多,共计有370多个,可分为以下几块:
类别说明
抽象类这些类主要为子类或其他类提供一个基本功能,如框架
类Qframe和试图类QCanvas
基本控件提供诸如按钮、下拉框这样的标准控件
高级控件提供诸如进度条和ListView之类的控件
数据库类现在的应有程序往往要和各种不同数据库打交道,Qt为此提供了丰富的支持,不过在免费版中该项支持是很有限的
时间类处理日期和时间
拖拉操作类Windows中的拖拉操作(Drag and Drop)使用很方便,Unix中同样可以轻松实现
系统环境类这批类库用来实现一些系统整体上的功能,诸如事件捕获、存取系统设置等
事件类创建和控制事件
显示无关类诸如链表、队列、字符串类
图像、打印类提供多种图像文件的输入输出以及打印,还包括鼎鼎大名的OpenGL
帮助系统类在Qt中不仅可以显示以HTML为基础的帮助文件,还对每个控件的帮助提示做了很好的实现
几何管理类管理控件在界面上的分布和相互间的位置关系
隐含/显式类提供诸如QbitArray、Qbitmap、Qbrush等这些内存操作、
设备相关类,有些只用于Qt内部,大部分适合用户使用
输入输出与网络类提供文件的读写和网络操作
主窗口相关类当你想创建一个比较酷的窗体时,不妨考虑这批类库,
其中包括菜单条、工具条等
多媒体类提供图橡、声音与动画的操作对象模型类这是Qt的框架、包括信号/反应槽机制的基础控件组织类主要用于界面,其目的是分隔和组织好一批相邻控件插件类有很多软件为了方便功能的扩展提供了插件,Qt的设计者见缝插针,让你也时髦一把标准对话框这个想必就不用解释了,太常用了模板类C++中一个很有特色的东西是模板,通过模板可以让程序代码更灵活线程类Windows和Unix的多线程设计有着不小的区别,Qt在此也算尽力了XML XML标准是如此的盛行以致于下一版的数据库将称作XML Database,Qt中也加入了对XML的支持综合类其他各种有用的功能
    Qt为了完成其跨平台的设计目的,在其代码中使用了一些专有的关键字与宏,也使用了自已的资源文件(后缀为ui的文本文件)。由于Qt的开发包内并不附带C++编译器,因此为了能在主流C++编译器中编译Qt开发的程序,Trolltech公司特意开发了预编译器moc.exe与uic.exe。前者把有信号/反应槽(signals/slot)特征的头文件“翻译”成标准的C++文件,后者把ui资源文件“翻译”成标准的C++类定义文件。这两个预编译器的执行无需人工进行,但也不是全自动,而是由工程文件中的指令预先定义。综观Qt的整个编译过程,可如下所示:Q t 是我们所接触的一个很好的类库( 可能用平台更合适),虽然平时也经常使用MFC。这个“很好”并不单单是指它的类可以为我们的程序开发减少工作量(当然这也是一个原因),更重要的是我们可以从Qt本身学到很多体系结构的设计。虽然Linux本身也是一个很好的体系,并且开放代码,但如果一个开发人员要从Linux的源码一点一滴开始学起再全盘
掌握的话可能要花费相当多的时间。相比之下Qt整套架构不算小,这使得它有着丰富的功能,诸如图形、网络、数据库、各种控件、IO操作以及与COM类似的接口,但也并不是非常的庞大以至于大多数人搞上两三年还搞不清楚其细节。Qt是面向对象设计的,各种功能封装在类中,整套架构清晰明了,相比之下MFC似乎隐藏了更多的细节。同时Qt是开放源码的,又有商业公司对它精心呵护,加上世界各地开发人员的踊跃参与使它兼具实用性与理论性。用心体会Qt,我们可以在较短的时间内提升自己的总体设计水平,而不仅仅是编程能力。
    学习Qt的最好方法当然是自己动手实践。Qt的Windows开发包是通过安装程序解开的,只要执行后按其提示操作就可以了。Qt Windows 2.3版只在VC 5平台测试过,3.0版则既可以配合VC6、也可以用在Borland Builder5(bcc32 5.5)上面,建议使用VC6。注意在安装前应已安装了相应的编译器。对于VC来说,安装成功后就会新增一个Addin插件,如下图所示:
    同时增加一个工具条: 通过工具条可以方便地启动Qt向导和可视化编辑器。对于unix版本来说,安装是
通过命令行来进行的:首先需要解开安装包,然后在用户脚本中增加环境变量。
对于Redhat 来说是在用户的.profile 文件中增加以下语句:
QTDIR=/usr/local/qt / * 具体是哪个路径因人而异, 不要搞错了 * /
PATH=$QTDIR/bin:$PATH
MANPATH=$QTDIR/doc/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QTDIR PATH MANPATH LD_LIBRARY_PATH
之后进入Qt的目录,运行./configure 和make。前者的作用是配置Qt的lib库,后者则是编译Qt的库文件、样例、导引和工具。建议在unix上安装Qt时选用一台配置比较高的机器,否则整个编译过程会花费较多时间。本系列文章的测试平台分别如下:
1.Windows版
硬件:
AMD Athlon500 CPU + 256M内存 + 40G硬盘
软件:
Win2k Advanced Server英文版(sp2,缺省字符集选择中文) + Visual C++6.0(sp5) + Qt 2.3 非商业版(部分工具引自3.0评估版)
2.Linux版
硬件:
AMD K6-2 300 CPU + 196M内存 + 8.6G硬盘
软件
RadHat 7.0 + Qt3.0评估版在这篇文章里,我们大概了解了Qt的历史和特点,也安装了Qt。在下一篇文章里面,我们将来探讨Qt很有特点的信号处
[ 此贴被fanyu在2005-09-07 10:24重新编辑 ]
离线quitecn
只看该作者 1楼 发表于: 2005-09-07
比较详细,谢谢版主
快速回复
限100 字节
 
上一个 下一个