资源描述
北京邮电大学毕业论文
i
劳拉方块游戏设计与实现
摘要
劳拉方块是一款老少咸宜的小游戏,和俄罗斯方块类似,其中加入了等级的概念。游戏中的每一块落下的方块都由四个小色块组成,这四个小色块存储在一个数组的四个元素中,计算机随机产生不同类型的七种方块,根据计算机时钟控制它在一定的时间不停的产生。用户可以通过上下左右四个方向键(方向键的事件处理)来实现方块的翻转、向左、向右和向下。然后程序根据这七种方块对叠成不同的模型。
论文首先描述了游戏的历史和开发环境,然后完整地展现了软件定义,可行性研究、需求分析、概要设计、详细设计和软件测试,整个开发过程贯穿软件工程的知识体系。
此次设计在Linux下,以C++作为开发语言,在Qt平台上进行游戏的设计与实现,最终完成了代码部分的全部工作。能够设计出一款小游戏,寓教于乐,对我来说十分有意义。
关键词:游戏开发;Qt;控制;C++
i
Laura box Game Design and Implementation
Abstract
Laura box is a game for all ages , and like Tetris , which added the concept of class . Each game consists of a falling block consisting of four small blocks of color , these four small patches stored in an array of four elements , the computer randomly generated seven different types of boxes , according to the computer clock to control it to some time to stop production. Users can up and down the four arrow keys ( arrow keys event processing ) to achieve the box, flip, left, right and down. Then the program based on these seven boxes for Diecheng different models.
Paper first describes the game's history and development environment , and then show the complete software-defined , feasibility studies, needs analysis , outline design, detailed design , and software testing throughout the entire development process of knowledge of software engineering.
The design under Linux, in C + + as a development language , the Qt platform design and implementation of the game, the final completion of all the work the code section. Able to design a small game , entertaining, very meaningful to me .
Keywords: game development; Qt; control;C++
ii
目录
摘要 i
Abstract ii
1.绪论 1
1.1 课题研究的目的及意义 1
1.2 电子游戏的发展状况 1
1.2.1 电子游戏及其分类 1
1.2.2 电子游戏发展现状 2
1.3 研究的主要内容 3
1.4 研究的目的和意义 3
2. 可行性研究 5
2.1 设计目的 5
2.2 软件的定义 5
2.3 可行性分析 5
2.4 结论意见 5
3. 需求分析 6
3.1 引言 6
3.2 游戏需求 6
3.3 开发环境 6
3.4 接口控制 7
3.5 方案论证 7
3.5.1 VB的特点 7
3.5.2 Java的特点 7
3.5.3 Qt的特点 8
3.5.4方案的选择 8
3.6 Qt简介 8
3.7 Qt的类库 10
3.8 Qt相比其他图形界面库的优点 10
3.9 Qt对象间通讯机制 11
4. 游戏的详细设计 13
4.1 劳拉方块游戏功能图 13
4.1.1 游戏运行流程图 13
4.1.2 方块下落得分图 14
4.1.3 游戏系统流程结构设计 15
4.2 图形实体类TetrixPiece实现 15
4.2.1 图形的产生 15
4.2.2 图形的旋转 16
4.3 游戏内容的实现 16
4.3.1 关于存储 16
4.3.2 关于七种色块的调用 17
4.3.3 关于色块的变形 17
4.3.4 关于方块下落 17
4.3.5 关于满行及消行判断 18
4.3.6 关于绘制游戏区域及方块 18
4.3.7 关于键盘事件响应 18
4.4 游戏主窗体的实现 18
5. 游戏主要功能选项的实现与检验 20
5.1 主要功能的验证 20
5.2 游戏快捷键简简介 20
5.3 调试程序 21
5.4 加载成功,观察效果 23
5.5 代码详解 24
5.5.1 main.cpp 24
5.5.2 tetrixboard.cpp 25
5.3.3 tetrixpiece.cpp 33
5.3.4 tetrixwindow.cpp 35
5.6 总结 37
结束语 38
参考文献 39
致谢 40
外文原文 41
外文翻译 53
1.绪论
1.1 课题研究的目的及意义
劳拉方块曾经是一款非常热门的小游戏,频频出现在电视机游戏和掌上游戏里。它简单易上手,但是变化无穷,充满了挑战。相信很多我的同龄人还记得小时候坐在小霸王游戏机前,紧握着游戏手柄,盯着屏幕上的游戏,玩到忘记了吃饭。大部分人应该都是在那个时候接触并喜欢上这款游戏的。人们不仅从这款游戏中得到了乐趣,而且从其中收获了成就感。在游戏设计领域,劳拉方块不仅仅是一款充满其妙体验的小游戏,更是一个启蒙。无数人编写游戏程序都是从劳拉方块开始的,因为这既是一个检验RAD开发工具的好方法,也是检验一个人对开发语言、环境和基本数据结构知识熟练程度的便捷途径。本次的设计与实现是在Linux[1]平台上完成的。
1.2 电子游戏的发展状况
游戏最早的雏形,可以追溯到人类原始社会流行的活动:扔石头、投掷带尖的棍子。这些最早的游戏显然是以增强生存技能作为初衷。社会进步后,棋牌类游戏、竞技类游戏甚至电子游戏开始出现。电子游戏是其中的主角之一。劳拉方块在红白机时代曾是电子游戏中的天王之一,我国的用户大部分是通过红白机了解、喜欢上它的,无数人和它一起留在了那个年代。对于普通用户来说,它容易上手,操作简单,且游戏过程中变化无穷,在其多个衍生版本中,更是出现了联机版劳拉方块,使其成为一款竞技游戏,给用户提供了一个展现自己高超水平的场所。劳拉方块随着PC机的更迭不断演变,现在已经成为经典。
这款游戏的核心是通过不断变化的方块来训练人的反应能力。随着开发工具的更新换代,现在这款游戏已经成为学习软件设计入门的一个经典案例。本文中实现劳拉方块是利用数组作为方块的数据结构[2],对于初学者可仿照此类方法进行设计,从而了解游戏软件的设计与开发过程。
1.2.1 电子游戏及其分类
电子游戏,也就是运行在家用电脑、家用电子游戏机或是掌中宝游戏机及街机上的电子游戏程序。电子游戏作为一款互动娱乐型软件,结合了剧情、程序、动画、美术、音乐等技术,从电子游戏的分类来看,有着多种分类方式。按照游戏类型,传统的游戏分类将其分为第一人称射击游戏、角色扮演游戏、即时战略类游戏、策略类游戏等。而按照游戏运行平台的不同,又可以将电子游戏分为手机游戏、在线游戏、单机版PC游戏、游戏机游戏、互动电视游戏。现在,虽然未制定标准,但行业内将游戏进行标准分类,分为街机游戏、网络游戏、单机版PC游戏、互动电视游戏四大类。论文中采用此标准。在互联网(局域网)技术出现以前,电子游戏都是以单机版游戏的形式出现的。互联网技术出现后,玩家之间实现了同时在线娱乐,电子游戏的一部分步入网络游戏的阵营。所谓“网络游戏”,是指通过人与人之间的互动达到交流、休闲和娱乐的目的。网络游戏的实现,大大增加了游戏的互动性、真实性,丰富了电子游戏的内涵。现在,随着计算机与网络技术的发展,电子游戏获得了长足的进步,已经成为当今社会不可缺少的精神食粮。
1.2.2 电子游戏发展现状
电子游戏最初诞生于美国,一个还在MIT就读的学生于1971年设计了世界上第一个业务用游戏机[3],游戏的名字叫做《电脑空间》。
继第一款游戏问世之后,各类游戏开始纷纷被制作出来娱乐玩家。以欧美市场和日本市场最为成功。目前,世界第一大游戏市场仍是美国,其遵循以发行商为主的产业开发链模式,根据美国市场调查公司NPD Group调查统计,美国2006年游戏总销售金额(包括家用、掌上型主机及软件)为137亿美元,占了全球游戏市场的43%。
日本的游戏市场也是渊源已久。从上世纪六十年代初的街机,到六七十年代的家用游戏机,再到八九十年代的掌上游戏机,经过30多年的发展,如今的日本游戏产业已经成为第一娱乐产业,电玩业已经变成国家的经济支柱之一,每年占到GDP的1/5。
韩国则是当今网络游戏产业最发达的国家之一。如今国内市场超过60%的游戏产品都来自韩国的游戏软件开发商。韩国的游戏产业一度得到政府的大力支持。由文化观光部出面组建韩国游戏支援中心[4],向韩国游戏产业提供从资金到技术上的多方面支援;成立游戏投资联盟,政府每年向游戏产业投入的资金多达500亿韩元,并为游戏企业提供长期的低息贷款;设立信息化基金和文化产业基金,为游戏产业服务;对指定的风险企业实行各种税制优惠政策,减少甚至免除游戏企业的税务负担;建设游戏产业基地以扶持中小游戏企业的发展;对从事游戏产业的高科技人才免除两年的兵役。此外,韩国还开设了众多的游戏院校,以大力培养游戏人才,从而为游戏生产提供了基础保障。
与电子游戏发达的国家相比,在电子游戏方面,我国还与它们存在较大的差距。目前,我国的游戏市场正处在发展阶段,但在市面上流动的游戏软件主要还是来自于美国、日本、韩国等地,但在一些政策和市场的机遇下,国内的厂家正在蓬勃发展,国产原创游戏即将成为游戏的发展主流。
中国的游戏产业经过80年代初期台湾厂商的探索至90年代,开始了自己的研发、发行的历程,直至网络游戏的风行,中国的网络游戏开始有了飞速的发展。 1983年,智冠科技有限公司在中国台湾成立,为全球第一家签订授权重制中文版产品代理销售合约的公司,2000年智冠在台湾股票上市, 2002年其控股的中华网龙在台湾上市。
1996年底,UBI SOFT上海分公司暨上海育碧电脑软件有限公司成立。同年,全球游戏软件领军企业EA在中国上海成立办事处。1997年,由尚洋公司制作的《血狮》正式上市。 1997年,北京新天地互动多媒体技术有限公司成立,该公司引进了《古墓丽影III》(TombRaider III)、《盟军敢死队》等著名欧美游戏,并在1999年在中国率先掀起“游戏软件价格革命”,全面推行50元的价格体系,从此正版游戏价格开始贴近大众消费者。 1999年,业内估算中国电脑游戏市场(正版)约1.5亿元人民币。 2000年,大陆华彩软件代理发行第一款中文MMORPG《万王之王》正式推出,该游戏于1999年在台湾发行,由台湾雷爵资讯(Lager)开发。也在2000年,继《万王之王》、《石器时代》、《网络三国》在台湾上市之后,游戏桔子推出了《天堂》,游戏桔子成立于1995年,1999年以《便利店》在台湾奠定了地位。《天堂》这款由韩国著名游戏公司Ncsoft研发的网络游戏不但在本国大获成功,也在台湾再次夺冠。 2001年初,北京华义在中国大陆地区正式推出了《石器时代》,华义国际股份有限公司于1993年在台北成立,2001年在台湾股票上市。《石器时代》成为大陆当时最流行的网络游戏。2001年,天人互动软件技术有限公司在北京成立。当年与SEGA结成PC游戏业务的战略合作关系,发行了《樱花大战Ⅱ》《文明Ⅲ》《无冬之夜》等经典游戏,2002年,引进在欧美网络游戏《魔剑》(Shadow Bane),这是首款在中国测试的欧美网络游戏。 2001年5月,“联众世界”经过3年多的迅速成长,以同时在线17万人、注册用户约1800万的规模,成为当时世界用户数量第一的在线游戏网站。
2005年1月21日,中央电视台报道:我国网络游戏产业当年增加了50%,今后几年都将以50%以上的速度增长;第一届中国网络游戏年会报道:中国国内网络游戏2004年规模达24.7亿元,2009年规模将达到109.6亿元。
1.3 研究的主要内容
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。
从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,我在设计中在一个图片框中构造了一些的网状小块,由这些小块组合成新的形状,每四个小块连接在一起就可以构造出一种造型,因此我总共设计了7种造型,每种造型又可以通过旋转而变化出2到4种形状,利用随机函数在一个预览窗体中提前展示形状供用户参考,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动,然后对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,最后就可以得出用户的分数。
1.4 研究的目的和意义
那么研究基于Qt的劳拉方块游戏有什么意义呢?
虽然目前劳拉方块游戏已经有各种语言的不同版本,并且已经将其搬上了网络的平台,单人、双人单机对战和双人网络对战等各种模式均已被大众熟知。由于开发平台不统一,造成软件的管理和使用极不方便,并且容易受到软硬件环境更新的影响,限制了这些新技术在科研生产中发挥更好的作用.如果舍弃原有软件而重新开发,将会耗费大量的人力和资金,而且浪费了许多成熟的软件成果。
而Qt在源代码级上实现了跨平台特性,极大的支持了跨平台通用软件的开发。Qt可以用同一个源程序在不同平台上编译链接,生成目标代码,并取得相同的运行效果,称为“一次编写,随处编译”,利用这种方法充分实现了程序的跨平台运行。这种基于源代码的跨平台特性不仅解决了性能的问题,而且可以发挥各个平台的优势,充分利用每个平台自身的特点;并且即可以在新环境下实现原有软件的功能和特点,减少开发费用,还可以改进原有软件的不足,增加新的需求,从而提高软件的质量,延长软件生命期。
因此,利用Linux下基于Qt的应用程序开发是一个非常有意义的课题,具有重要的研究和商业价值。另外,通过本游戏的设计,检验了学习效果和动手能力,进一步深入Qt的学习,提高自己的编程水平,从而达到理论与实践相结合的目的。
在成为一个真正的游戏开发者的路上,劳拉方块是一个完美开始。为什么?因为它包括任何一个游戏中所有的元素。并且,不需要艺术家般的才能就能做出非常好看的劳拉方块游戏。任何一个能画出方块的人,每个作图形程序的人,就能做出商业品质的劳拉方块游戏。
以劳拉方块开始还有另外一个好处,不仅能做出一个完整的既好玩又容易上瘾游戏,而且它看上来和那些商业版本没什么区别。方块就是方块,不管是谁画出它们的,而且tetraminos(劳拉方块中使用的形状)也不过是一些方块的组合。
劳拉方块拥有所有游戏共通的独立成份。它有一个游戏循环(这个过程被反复执行直到游戏退出)。这个游戏循环读取玩家的输入,处理这个输入,然后更新游戏的元素(下落的tetraminos),并且检查是输还是赢。
以后要做的所有的简单的游戏都要用到这些东西,所以学习这个过程并且实现它是非常重要的。当第一次完成它之后,以后再做游戏时就能看出那个游戏有多难以及要花多长时间。如果没有完整的完成过这些,哪怕一次,就永远不能完整地正确领会其中的每个元素。当做大的项目时,就更不能确定其复杂性及所要的时间。如果甚至不能正确地领会这整个过程(因为你没能完成它),可能是没能建立一个合适的时间表或估计合适的时间,更有可能的是不够努力。
还有,玩劳拉方块可以练习人的反映能力,开始时快速的下降会让人手无足措,但适应了之后就会发现自己的反应力变的很快了。
另外长时间的手指活动可以让人血液流通加快有利健康。还有劳拉方块高手都知道要想赢,就要有远大的布局,决不能只局限于一点一点的减,这在无形中就提高了人的智慧。
2. 可行性研究
2.1 设计目的
通过本游戏的设计,结合自己在杰普软件所学到的知识,设计开发劳拉方块游戏,能培养自己的动手和思考能力,初步掌握软件工程的系统理论,加强自身对Qt基础编程知识的理解,提高自己编写程序的水平,从而达到理论与实践相结合的目的。
2.2 软件的定义
该游戏软件开发的主要任务是实现游戏的可视化界面操作。开发过程遵循工程开发规范,采用C++来实现界面和事件的控制,用户可以通过菜单栏的相应选项和上下左右四个方向键对游戏进行可视化的操控。游戏的开始、结束、方块变换、积分以及等级等功能都可以通过这些来进行调节。本游戏开发过程中还有很多生疏和疑问,实现的功能也较为简单,旨在能更好地了解C++的编写技巧和规范,为今后的工作积累经验。
2.3 可行性分析
(1) 技术可行性:C++语言中集成了很多标准类库,可以直接调用,Qt中大量的图形界面库和优良的封装和跨平台机制,使得实现界面的可视化以及事件的操控简单了很多。
(2) 经济可行性:本游戏的开发旨在提升自己的语言逻辑水平,完成毕业设计,考虑到的其他因素并不多,外界阻力很小,对经济要求不高。
(3) 社会可行性:本游戏设计完成后仅作毕业设计和私人使用,且设计内容健康,不会违反法律,不会对社会造成不良影响。
2.4 结论意见
综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编写。
3. 需求分析
3.1 引言
对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。
3.2 游戏需求
28种状态的方块随机产生,自由下落,落下时可由玩家用上、下、左、右控制键控制翻转和移动,以便以玩家所需要的形态和位置落下。如果落下时,方块的方格能填满某一行,则这一行可消去。消去一行后,游戏可给玩家加分,若由存在空格的方块填满整个窗口,则游戏失败。游戏功能需求如下:
游戏界面需求:设计良好的游戏界面可以让玩家充分感受到游戏带来的娱乐性,在设计好的一定的区域内运动和变形,不同的色块让其拥有不同的颜色,这样看起来会有一定的美感。
游戏形状需求:用数组作为存储方块8种状态的数据结构,即长条形、Z字形、反Z形、田字形、7字形、反7形、T字型,各个方块要能实现它的变形,可设为顺时针或逆时针变形。
键盘处理事件需求:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行顺时针变形、逆时针变形、向左、向右移动,D键可以使方块加速下落,SPACE键可以使方块瞬间落下。
鼠标处理事件需求:通过点击菜单栏中相应的菜单项,可以实现游戏的开始、结束,方块形状的变换,分数、等级的显示,以及游戏帮助等功能。
显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定分数的时候,会增加相应的等级。
3.3 开发环境
介于开发工具和软件使用的环境,我选择了如下的开发环境:
操作系统:Microsoft Windows 7 Ultimate(32位)
内存:3G
硬盘:500G
CPU:Intel(R) CORE(TM) I5 CPU M480
交互工具:键盘/鼠标
显示器:通用显示器
开发工具:Qt 5.3
3.4 接口控制
本游戏通过键盘进行操作,在Linux操作系统下,利用键盘的上、下、左、右、D以及SPACE键对方块进行移动变形,要使用键盘的接口事件。
3.5 方案论证
学校现已开设的课程有C语言、C++、java,我自学了Qt,加上自己浏览了一些其它相关的资料,通过网上以及图书馆的资料,知道可以通过C,C++和Qt,VB,Delphi,Java实现劳拉方块游戏的设计。下面简单介绍下VB、Java、Qt各自的优缺点:
3.5.1 VB的特点
全称Visual Basic,它是以Basic语言作为其基本语言的一种可视化编程工具。在中国乃至全世界都能看到它的身影,它曾是在中国最为流行的编程工具,到现在还占 据着非常重要的地位,对于它的好坏大家都有一定的了解,VB作为一种较早出现的开发程序以其容易学习,开发效率较高,具有完善的帮助系统等优点曾影响了好 几代编程人员,但是由于VB不具备跨平台这个特性,从而也决定了VB在未来的软件开发中将会逐渐地退出其历史舞台;它对组件技术的支持是基于COM和 ActiveX,对于组件技术不断完善发展的今天,它也显出了它的落后性;同时VB在进行系统底层开发的时候也是相对复杂的,调用API函数需声明,调用 不方便,不能进行DDK编程,不可能深入Ring0编程,不能嵌套汇编;而且面向对象的特性差;网络功能和数据库功能也没有非常突出的表现,综上所 述,VB作为一种可视化的开发工具由于其本身的局限性,导致了它在未来软件开发中逐步被其他工具所代替。
3.5.2 Java的特点
(1)安全性 Java是一种安全的网络编程语言,不支持指针类型,一切对内存的访问都必须通过对象的实例来实现。这样能够防止他人使用欺骗手段访问对象的私有成员,也能够避免在指针操作中易产生的错误。
此外,Java的安全性体现在多个层次上:在编译层,有语法检查;在解释层,有字节码校验器,可进行代码段格式测试和规则检查、访问权限和类型转换合法性检查、操作数堆栈的上溢和下溢检测、代码参数类型合法性检查等;在平台层上,通过配置策略,可设定访问资源域,无须区分本地或远程。
(2)可移植性 Java具备有很好的移植性,这主要得益于它与平台无关的特性。同时,Java的类库中也实现了与平台无关的接口,这使得这些类库也能移植。同时,Java编译器主要是由Java本身来实现的,Java的运行系统(解释器)由标准C语言实现,因而整个Java系统都具有可移植性。
(3)多线程机制 Java具有多线程机制,这使得应用程序能够并行地执行。它的同步机制也保证了对共享数据的共享操作,而且线程具有优先级的机制,有助于分别使用不同线程完成特定行为,也提高了交互的实时响应能力。Java的多线程技术使网上实时交互实现很容易,从而为解决网上大数量的客户访问提供了技术基础。
(4)跨平台 通常,在Windows下编写的程序是不能直接拿到UNIX上运行的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和操作系统编写的程序是不能够直接放到其他类型的计算机硬件上执行的,至少要做移植工作。要想让程序能够在不同的计算机上运行,就要求程序设计语言能够跨越各种软件和硬件平台,而Java恰恰满足了这一需求。Java编译器能够产生一种与计算机体系结构无关的字节指令,只要安装了Java虚拟机,Java就可以在相应的处理机上执行。
3.5.3 Qt的特点
Qt拥有一个单一的Library,让你开发各种不同平台的程序,目前支持Windows、Linux、 Mac、UNIX、Embedded Linux,讲白话点,就是它提供了一个Library让你开发GUI程序,写好之后,只要在各平台重新Compile后,就可以在各平台执行,而且使用完整的ANSI C++语言,且不限Compiler,只要是C++的Compiler都可以,重要的是,该Library相当漂亮,写出来的程序很像C++ Builder或.NET Framework的那样精简,不会向MFC那样复杂。目前Qt已经到第四个版本,GUI部分算支持的相当完整,且支持数据库、XML、Multi- Thread、Socket等方面的programming。若以后台角度来说,无论后端是什么数据库,只要透过相同的Interface,不同数据库的Class来实做这个Interface,前端GUI的程序写法完全不用改变,同理,面对不同的OS,理论上只要透过相同的Interface,不同OS的Class各自实做这个Interface,前端GUI的程序也完全不用改变,最后只要靠Compiler将程序compile成各平台的原生程序即可,这样即可保证其执行速度,不用再靠Virtual Machine。但很可惜这个理想,这么多年来都没人可以做出来。Qt无疑是GUI终极解决方案,有强力的ANSI C/C++语言背书,又有单一的GUI Library,且精简漂亮,又能Compile成各平台的原生执行档,几乎是最完美的解决方案了。
3.5.4方案的选择
经过以上比较好,考虑到Qt的众多良好特性,尤其是其跨平台性,决定使用Qt开发俄罗斯方块游戏。
3.6 Qt简介
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。
但是真正使得 Qt 在自由软件界的众多 Widgets (如 Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于 Qt 的重量级软件 KDE 。 有趣的是,KDE 也是使得 Trolltech 公司承受巨大压力的一个原因。下面我们将来看看这场 著名的自由软件圣战 -- "KDE/QT .VS. Gnome/Gtk" 是怎么发生的。
在 Unix 的图形界面一向是以 MIT[5] 的 X Window 系统为标准, 可是在商业应用上有两大流派,一派是以Sun公司领导的Openlook阵营,一派IBM/HP领导的OSF (Open Software Foundation) 的 Motif,双方经过多年竞争之后,Motif最终胜出,成为最普遍使用的界面库,后来双方又妥协出一个CDE(Common Desktop Enviroment)作为一个标准的图形界面。但是 Motif/CDER 的价格非常昂贵,在这同时微软的Windows 图形界面发展速度非常快,而Unix界的后起之秀Linux也急需一个可靠并且免费的图形界面。
1996年10月,由开发图形排版工具Lyx的德国人Matthias Ettrich发起了KDE计划。KDE的全称为K Desktop Environment,可以看出是针对CDE。KDE本身是采用GPL宣言的,但是KDE却是使用Qt来作为其底层库,因为当时Qt已经将其Unix版本自由发布了,但是Qt并不遵循GPL,因此KDE被很多自由软件的作者攻击,认为利用非自由软件开发违背了GPL的精神,于是GNU的狂热信徒兵分两路,一路是去制作 Harmonny,试图重写一套兼容于Qt的替代品,另一路是由一个26岁的墨西哥程序员Miguel De Icaza领导下重新开发一套叫GNOME(GNU Network Object Enviroment)来替代 KDE。
由于Linux界的老大RedHat不喜欢KDE/Qt的版权,因此RedHat甚至专门派出了几个全职程序员来加入GNOME进行开发工作,于是一场同Motif VS Openlook相似的圣战就这么打起来了。Trolltech为了KDE曾数次修改Qt的版权,从成立KDE Free Qt基金会到采用QPL,可谓是费尽心机,但是GNOME采用的GTK一开始就是完全的 GPL,因此在这个方面GNOME有一定的优势,加上Qt/KDE采用C++开发,入门的门槛比较高,而GTK/Gnome采用C,因此GNOME吸引了更多的自由软件开发者,但是 KDE毕竟先走了一步,推出的KDE1.1.2十分稳定,而当时急忙中推出的GNOME1.0的系统稳定性奇差,有人甚至笑称GNOME1.0还没有KDE 1.0 Alpha稳定。但是GNOME 后来发展比较快,大有迎头赶上的势头。当时双方的开发者在网络上炒得天翻地覆,连 Linux之父Linus只是说了一句喜欢用KDE都倍受指责。
战争到了第三个年头,也就是2000年,可谓是风云突变,一个接一个重大的事件先后发生: 首先是一批从 Apple 公司出来的工程师成立了一个叫 Eazel 的公司替 GNOME设计界面,然后是一批GNOME程序员成立了一个Helix Code公司替GNOME 提供商业支持,而大家期待以久的KDE 2.0也终于发布了,这恐怕是目前最为庞大的自由软件了之一, 除了KDE本身,还包括Koffice套件,和集成开发环境Kdevelop等等大批软件,其主力软件Kounqueror也是第一个可以同微软的Internet Exploer相抗衡的浏览器。而Sun公司,Red Hat公司,Eazel 公司,Helix Code等一批公司成立了一个GNOME基金会,Sun 还宣布将把重量级办公软件Star office同GNOME集成, Trolltech 公司自然不能坐以待毙,于今年10月4日将Qt的free edition变为GPL宣言,彻底解决了KDE的版权问题, 又推出了嵌入式Qt ,给了GNOME阵营一个有力的回击。
到现在为止,这场战争还在继续, 相信我们不能很快看到结果。一般说来,目前 GNOME吸引的公司比较多,但是 KDE/Qt 的开发的效率和质量比GNOME高,而且在 Office/嵌入式 环境中先走一步,在一定时间内还将处于优势地位。
那么对于用户来说,如何在Qt/GTK中作出选择呢?一般来说,如果用户使用 C++,对库的稳定性,健壮性要求比较高,并且希望跨平台开发的话,那么使用Qt是较好的选择,但是值得注意的是,虽然Qt的Free Edition采用了GPL宣言,但是如果你开发 Windows上的Qt软件或者是Unix上的商业软件,还是需要向Trolltech公司支付版权费用的。
Qt Creator是一个用于Qt开发跨平台集成开发环境(IDE),Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境 (IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。并且它包含了一套用于创建和测试基于Qt应用程序的高效工具,包括:一个高级的C++代码编辑器、上下文感知帮助系统、可视化调试器、源代码管理、项目和构建管理工具。Qt Creator 2.3.1和 Qt 4.7共同构成的Qt SDK,包含了开发跨平台应用程序所需的全部功能。
Qt支持windows平台、linux/unix平台、macintosh平台、Embedded平台等,所以Qt所开发的应用具有良好地可移植性。
Qt官网()上有完整的SDK下载,下载开发平台的SDK,下载完成后点击即可安装。
安装完成后,运行Qt。
3.7 Qt的类库
Qt类库大致可以分为三个部分:控件,框架和工具。
(1)控件 控件部分包括环境控件,主窗口控件,标准对话框, 基本的GUI控件,扩展GUI控件,GUI组织控件,以及帮助系统控件。
环境控件为应用程序提供全局服务的类,包括系统设定、国际化等。例如QTranslator, Qapplication。主窗口类为应用程序提供界面框架,可以在上面添加菜单、工具条等,为应用程序提供集装箱的功能,如QMainWindow。标准对话框类是为打开/关闭文件,选择颜色等预先设计的标准对话框,如QColorDialog, QFileDialog。基本控件包括所有的GUI控件,如按钮、组合框等,如QPushButton。扩展的控件包括树状视图、进度条等, 如QListView。GUI组织类负责对各种控件进行组织以构成复杂的对话框, 如QGroupBox。帮助系统控件是为应用程序提供在线帮助的类,QStatusBar,QToolTip。
(2)框架 框架部分包括的是一些抽象的类,通常不可见,如对象模型、抽象控件、绘图、拖放、控件外观。对象模型是框架的基础,如QObject。可见的控件一般从抽象控件派生,如QButton。绘图类控制绘图, 如QBrush。拖放类控制拖放操作,如QDragObject。控件外观类控制控件的外观如颜色、字体等。例如QColor。
(3)工具 工具部分包括时间日期和链表树等数据结构,它们和GUI无关。普通工具包括链表、堆栈、队列、树等常见数据结构,如QArray。图形处理工具控制图像的编码/解码算法。如QImageIO。I/O控制工具处理I/O的一些类,如QFile。时间和日期工具类处理时间和日期,如Qdate, QTime。另外还有其他杂类如Qsignal, QIconSet等。
3.8 Qt相比其他图形界面库的优点
(1)优良的跨平台特性。
Qt支持下列操作系统:Microsoft Windows 95/98、Microsoft Windows NT、Linux、Solaris、SunOS、HP-UX、Digital UNIX (OSF/1、Tru64)、Irix、FreeBSD、BSD/OS、SCO、AIX、OS390和QNX等。
(2)面向对象。
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
(3)丰富的API。
Qt包括多达250个以上的C++类,还提供基于模板的collections、serialization、file、I/O device、directory management和date/time类。甚至还包括正则表达式的处理功能。
(4)支持2D/3D图形渲染,支持OpenGL。
(5)大量的开发文档。
(6)XML支持。
3.9 Qt对象间通讯机制
对象间通讯是面向对象程序设计的一个极其重要的内容,类似于Microsoft MFC的消息映射和事件循环,Qt的对象间通讯采用的是信号—槽(signal—slot)机制,信号就好像是事件,而槽则是响应事件的方法。如果需要实现对象间的通讯,只需要把一个对象的信号和另外
展开阅读全文