QT程序设计基础.ppt_第1页
QT程序设计基础.ppt_第2页
QT程序设计基础.ppt_第3页
QT程序设计基础.ppt_第4页
QT程序设计基础.ppt_第5页
免费预览已结束,剩余121页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于QT的GUI程序设计 www gec edu org www gec edu org 目录 www gec edu org 什么是GUI 图形用户界面 GraphicalUserInterface 简称GUI 又称图形用户接口 是指采用图形方式显示的计算机操作用户界面 准确来说GUI就是屏幕产品的视觉体验和互动操作部分 与早期计算机使用的命令行界面相比 图形界面对于用户来说在视觉上更易于接受 GUI是一种结合计算机科学 美学 心理学 行为学 及各商业领域需求分析的人机系统工程 强调人 机 环境三者作为一个系统进行总体设计 www gec edu org 什么是GUI GUI设计准则减少用户的认知负担保持界面的一致性满足不同目标用户的创意需求用户界面友好性图标识别平衡性图标功能的一致性 www gec edu org GUI发展 70年代 施乐公司XeroxPaloAltoResearchCenter PARC 的研究人员开发了第一个GUI图形用户界面 开启了计算机图形界面的新纪元 80年代以来 操作系统的界面设计经历了众多变迁 OS 2 Macintosh Windows Linux SymbianOS 各种操作系统将GUI设计带进新的时代 现简单介绍介绍80年代以来各种操作系统GUI界面设计的进化史 第一个使用现代图形界面的个人电脑是XeroxAlto 设计于1973年 该系统并未商用 主要用于研究和大学 1981 1985Xerox8010Star 1981年推出 这是第一台全集成桌面电脑 包含应用程序和图形用户界面 GUI 一开始叫TheXeroxStar 后改名为ViewPoint 最后又改名为GlobalView www gec edu org GUI发展 www gec edu org GUI发展 AppleLisaOfficeSystem1 1983 又称LisaOS 这里的OS是OfficeSystem的缩写 苹果开发这款机器的初衷是作为文档处理工作站 不幸的是 这款机器的寿命并不长 很快被更便宜的Macintosh操作系统取代 LisaOS几个升级包括1983年的LisaOS2 1984年的LisaOS7 73 1 www gec edu org GUI发展 VisiCorpVisiOn 1984 VisiOn是为IBMPC开发的第一款桌面GUI 该系统面向大型企业 价格昂贵 使用基于鼠标的GUI 它内置安装程序与帮助系统 但尚未使用图标 www gec edu org GUI发展 MacOSSystem1 0 1984 System1 0是最早的Mac操作系统GUI 已经拥有现代操作系统的几项特点 基于窗体 使用图标 窗体可以用鼠标拖动 文件与文件夹可以通过拖放进行拷贝 www gec edu org GUI发展 AmigaWorkbench1 0 1985 一经发布 Amiga就领先时代 它的GUI包含诸如彩色图形 四色 黑 白 蓝 橙 初级多任务 立体声以及多状态图标 选中状态和未选中状态 www gec edu org GUI发展 Windows1 0 x 1985 1985年 微软终于在图形用户界面大潮中占据了一席之地 Windows1 0是其第一款基于GUI的操作系统 使用了32x32像素的图标以及彩色图形 其最有趣的功能是模拟时钟动画图标 www gec edu org GUI发展 Windows2 0 x 1987 这个版本的Windows操作系统中对Windows的管理有了很大改进 Windows可以交叠 改变大小 最大化或最小化 www gec edu org GUI发展 OS 21 x releasedin1988 OS 2最早由IBM和微软合作开发 然而1991年 随着微软将这些技术放到自己的Windows操作系统 两家公司决裂 IBM继续开发OS 2 OS 2使用的GUI被称为 PresentationManager 展示管理 这个版本的GUI只支持单色 以及固定图标 www gec edu org GUI发展 OS 21 20 1989 OS 2的下一个小版本在很多方面都做了改进 图标看上去更好看 窗体也显得更平滑 www gec edu org GUI发展 Windows3 0 1990 到Windows3 0 微软真正认识到GUI的威力 并对之进行大幅度改进 该操作系统已经支持标准或386增强模式 在增强模式中 可以使用640K以上的扩展内存 让更高的屏幕分辨率和更好的图形成为可能 比如可以支持SVGA800 x600或1024x768 同时 微软聘请SusanKare设计Windows3 0的图标 为GUI注入统一的风格 www gec edu org GUI发展 MacOSSystem7 releasedin1991 MacOS7是第一款支持彩色的GUI 图标中加入了微妙的灰 蓝 黄阴影 www gec edu org 现代GUI www gec edu org GUI未来定位 纵观国际相关产业在图形化用户界面设计方面的发展现状 许多国际知名公司早已意识到GUI在产品方面产生的强大增值功能 以及带动的巨大市场价值 因此在公司内部设立了相关部门专门从事GUI的研究与设计 同业间也成立了若干机构 以互相交流GUI设计理论与经验为目的 随着中国IT产业 移动通讯产业 家电产业的迅猛发展 在产品的人机交互界面设计水平发展上日显滞后 这对于提高产业综合素质 提升与国际同等业者的竞争能力等等方面无疑起了制约的作用 www gec edu org GUI未来定位 GUI应用领域手机通讯移动产品电脑操作平台软件产品PDA产品数码产品车载系统产品智能家电产品游戏产品产品的在线推广 www gec edu org GUI未来定位 GUI的品牌目标如何使得用户能够接受产品 并加强对产品品牌印象 进而提升他们对产品的依赖度 信任度 最终成为最忠实的固定目标消费群 对于产品而言 无疑是非常重要的关键点 因此具有企业文化特征的产品品牌需要渗入进产品的GUI 形成其独特的产品魅力 GUI品牌趋势在产品性能和品质越来越同质化的竞争条件下 唯一可以形成差异就是以企业文化为灵魂所打造出的品牌 那么由个性的衍变而对产品所产生的价值和内涵 将是大势所趋 www gec edu org Linux下的桌面GUI VS KDE gnome www gec edu org Linux下的桌面GUI KDE与GNOME是目前Linux UNIX系统最流行的图形操作环境 从上个世纪九十年代中期至今 KDE和GNOME都经历了将近十年的漫漫历程 两者也都从最初的设计粗糙 功能简陋发展到相对完善的阶段 可用性逼近Windows系统 图形环境的成熟也为Linux的推广起到至关重要的作用 尽管Linux以内核健壮 节省资源和高质量代码著称 但缺乏出色的图形环境让它一直难以在桌面领域有所作为 导致Linux桌面应用一直处于低潮 www gec edu org Linux下的桌面GUI XWindow打造桌面环境Linux实际上是以UNIX为模板的 它继承了UNIX内核设计精简 高度健壮的特点 无论系统结构还是操作方式也都与UNIX无异 微软Windows在早期只是一个基于DOS的应用程序 用户必须首先进入DOS后再启动Windows进程 而从Windows95开始 微软将图形界面作为默认 命令行界面只有在需要的情况下才开启 后来的Windows98 Me实际上也都隶属于该体系 但在Windows2000之后 DOS被彻底清除 Windows成为一个完全图形化的操作系统 但UNIX Linux与之不同 强大的命令行界面始终是它们的基础 在上个世纪八十年代中期 图形界面风潮席卷操作系统业界 麻省理工学院 MIT 也在1984年与当时的DEC公司合作 致力于在UNIX系统上开发一个分散式的视窗环境 这便是大名鼎鼎的 XWindowSystem 项目 www gec edu org Linux下的桌面GUI XWindow 不是XWindows 其不是一个直接的图形操作环境 而是作为图形环境与UNIX系统内核沟通的中间桥梁 任何厂商都可以在XWindow基础上开发出不同的GUI图形环境 MIT和DEC的目的只在于为UNIX系统设计一套简单的图形框架 以使UNIX工作站的屏幕上可显示更多的命令 对于GUI的精美程度和易用程度并不讲究 毕竟那时候能够熟练操作UNIX的都是些习惯命令行的高手 根本不在乎GUI存在与否 1986年 MIT正式发行XWindow 此后它便成为UNIX的标准视窗环境 紧接着 全力负责发展该项目的X协会成立 XWindow进入了新阶段 与此同步 许多UNIX厂商也在XWindow原型上开发适合自己的UNIXGUI视窗环境 其中比较著名的有SUN与AT T联手开发的 OpenLook IBM主导下的OSF OpenSoftwareFoundation 开放软件基金会 开发出的 Motif www gec edu org Linux下的桌面GUI 一些爱好者则成立了非营利的XFree86组织 致力于在X86系统上开发XWindow 这套免费且功能完整的XWindow很快就进入了商用UNIX系统中 且被移植到多种硬件平台上 后来的Linux也直接从该项目中获益 当然 这些早期的XWindow环境都设计得很简单 许多GUI元素模仿于微软的Windows 但XWindow拥有一个小小的创新 当鼠标指针移动到某个窗口时 该窗口会被自动激活 用户无需点击便能够直接输入 简化了用户操作 这个特性在后来的KDE和Gnome中也都得到完整的继承 www gec edu org Linux下的桌面GUI 由于必须以UNIX系统作为基础 XWindow注定只能成为UNIX上的一个应用 而不可能与操作系统内核高度整合 这就使得基于XWindow的图形环境不可能有很高的运行效率 但它的优点在于拥有很强的设计灵活性和可移植性 XWindow从逻辑上分为三层 最底层的XServer X服务器 主要处理输入 输出信息并维护相关资源 它接受来自键盘 鼠标的操作并将它交给XClient X客户端 作出反馈 而由XClient传来的输出信息也由它来负责输出 最外层的XClient则提供一个完整的GUI界面 负责与用户的直接交互 KDE Gnome都是一个XClient 而衔接XServer与XClient的就是 XProtocol X通讯协议 它的任务是充当这两者的沟通管道 尽管UNIX厂商采用相同的XWindow 但由于终端的XClient并不相同 这就导致不同UNIX产品搭配的GUI界面看起来非常不一样 www gec edu org Linux下的桌面GUI 在上个世纪九十年代中期 以开源模式推进的Linux在开发者中已经拥有广泛的影响力 尽管XWindow已经非常成熟 也有不少基于XWindow的图形界面程序 但它们不是未具备完整的图形操作功能就是价格高昂 根本无法用于Linux系统中 如果Linux要获得真正意义上的突破 一套完全免费 功能完善的GUI就非常必要 1996年10月 图形排版工具Lyx的开发者 一位名为MatthiasEttrich的德国人发起了KDE KoolDesktopEnvironment 项目 与之前各种基于XWindow的图形程序不同的是 KDE并非针对系统管理员 它的用户群被锁定为普通的终端用户 MatthiasEttrich希望KDE能够包含用户日常应用所需要的所有应用程序组件 例如Web浏览器 电子邮件客户端 办公套件 图形图像处理软件等等 将UNIX Linux彻底带到桌面 当然 KDE符合GPL规范 以免费和开放源代码的方式运行 www gec edu org Linux下的桌面GUI KDE项目发起后 迅速吸引了一大批高水平的自由软件开发者 这些开发者都希望KDE能够将Linux系统的强大能力与舒适直观的图形界面联结起来 创建最优秀的桌面操作系统 经过艰苦卓绝的共同努力 KDE1 0终于在1998年的7月12日正式推出 但仍远远比不上同时期的Windows98来得平易近人 KDE1 0中大量的Bug更是让人头疼 但对开发人员来说 KDE1 0的推出鼓舞人心 它证明了KDE项目开源协作的开发方式完全可行 开发者对未来充满信心 在KDE1 0版的开发过程中 SUSE Caldera等Linux商业公司对该项目提供资金上的支持 在1999年 IBM Corel Redhat 富士通 西门子等公司也纷纷对KDE项目提供资金和技术支持 自此KDE项目走上了快速发展阶段并长期保持着领先地位 www gec edu org Linux下的桌面GUI KDE1 0尽管设计粗糙 但它奠定了整个KDE项目的基础 www gec edu org Linux下的桌面GUI Qt是一个跨平台的C 图形用户界面库 它是挪威TrollTech公司的产品 诞生于1994年 基本上 Qt同XWindow上的Motif OpenLook GTK等图形界面库和Windows平台上的MFC OWL VCL ATL是同类型的东西 但Qt具有优良的跨平台特性 支持Windows Linux 各种UNIX OS390和QNX等 面向对象机制以及丰富的API 同时也可支持2D 3D渲染和OpenGLAPI 在当时的同类图形用户界面库产品中 Qt的功能最为强大 MatthiasEttrich在发起KDE项目时很自然选择了Qt作为开发基础 也正是得益于Qt的完善性 KDE的开发进展颇为顺利 TrollTech公司对于KDE项目拥有非常强的影响力 当然不能说绝对掌握 毕竟KDE开发工作仍然是由自由程序员协作完成的 www gec edu org Linux下的桌面GUI KDE采用GPL规范进行发行 但底层的基础Qt却是一个不遵循GPL的商业软件 这就给KDE上了一道无形的枷锁并带来可能的法律风险 一大批自由程序员对KDE项目的决定深为不满 它们认为利用非自由软件开发违背了GPL的精神 于是这些GNU的狂热信徒兵分两路 其中一部分人去制作Harmonny 试图重写出一套兼容Qt的替代品 这个项目虽然技术上相对简单 但却没有获得KDE项目的支持 另一路人马则决定重新开发一套名为 GNOME GNUNetworkObjectEnvironment 的图形环境来替代KDE 一场因为思想分歧引发的GUI之战开始了 www gec edu org Linux下的桌面GUI Qt是整个KDE的基础GNOME与KDE交替发展 www gec edu org Linux下的桌面GUI GNOME项目于1997年8月发起 创始人是当时年仅26岁的墨西哥程序员MiguelDeIcaza 关于GNOME的名称有一个非常有趣的典故 Miguel到微软公司应聘时对它的ActiveX COMmodel颇有兴趣 GNOME NetworkObjectModel 的名称便从此而来 GNOME选择完全遵循GPL的GTK图形界面库为基础 因此我们也一般将GNOME和KDE两大阵营称为GNOME GTK和KDE Qt 与Qt基于C 语言不同 GTK采用较传统的C语言 虽然C语言不支持面向对象设计 看起来比较落后 但当时熟悉C语言的开发者远远多于熟悉C 的开发者 加之GNOME GTK完全遵循GPL版权公约 吸引了更多的自由程序员参与 但由于KDE先行一步 且基础占优势 一直都保持领先地位 www gec edu org Linux下的桌面GUI GNOME的转机来自于商业公司的支持 当时Linux业界的老大RedHat很不喜欢KDE Qt的版权 在GNOME项目发起后RedHat立刻对其提供支持 进入2000年之后 一系列重大事件接连发生 首先 一批从苹果公司出来的工程师成立Eazel公司 为GNOME设计用户界面和Nautilus 鹦鹉螺 文件管理器 同年8月 GNOME基金会在Sun RedHat Eazel HelixCode Ximian 的共同努力下正式成立 该基金会负责GNOME项目的开发管理以及提供资金 此时 GNOME获得许多重量级商业公司的支持 如惠普公司采用GNOME作为HP UX系统的用户环境 SUN则宣布将StarOffice套件与GNOME环境相整合 而GNOME也将选择OpenOffice org作为办公套件 IBM公司则为GNOME共享了SashXB极速开发环境 同时 GNOME基金会也决定采用Mozilla作为网页浏览器 KDE阵营也毫不示弱 在当年10月份推出万众瞩目的KDE2 0 www gec edu org Linux下的桌面GUI KDE2 0拥有丰富的应用软件 实力明显超过GNOME www gec edu org Linux下的桌面GUI KDE2 0堪称当时最庞大的自由软件 除了KDE平台自身外 还包括Koffice办公套件 Kdevelop集成开发环境以及Konqueror网页浏览器 尽管这些软件都还比较粗糙 但KDE2 0已经很好实现了成立KDE项目时的目标 也是在这个月 TrollTech公司决定采用GPL公约来发行Qt的免费版本 希望能够以此赢得开发者的支持 这样 Qt实际上就拥有双重授权 如果对应的Linux发行版采用免费非商业性的方式进行发放 那么使用KDE无须向TrollTech交纳授权费用 但如果Linux发行版为盈利性的商业软件 那么使用KDE时必须获得授权 由于TrollTech是商业公司且一直主导着KDE的方向 双许可方式不失为解决开源与盈利矛盾的好办法 TrollTech宣称 双许可制度彻底解决了KDE在GPL公约方面的问题 但RedHat并不喜欢 RedHat不断对GNOME项目提供支持 希望它能够尽快走向成熟 除RedHat之外的其他Linux厂商暂时都站在KDE这一边 但他们同时也在发行版中捆绑了GNOME桌面 www gec edu org Linux下的桌面GUI GTK库是GNOME项目的基础 它完全采用GPL授权因此获得广泛支持 GNOME获得商业公司的支持 www gec edu org Linux下的桌面GUI 进入2004年后 KDE与GNOME依然保持快速发展 KDE阵营分别在2月份和8月份推出3 2 3 3版本 GNOME则在3月和9月推出2 6和2 8 两者的版本升级步幅旗鼓相当 到3 3版本的KDE已经非常成熟 它拥有包括KOffice Konqueror浏览器 Kmail套件 KDE即时消息在内的一大堆应用软件 且多数都达到可用标准 功能上完全不亚于Windows2000 而GNOME更是在此期间高速发展 GNOME2 8版本的水准完全不逊于KDE3 3 而且此时两者的技术特点非常鲜明 GNOME讲究简单 高效 运行速度比KDE更快 KDE则拥有华丽的界面和丰富的功能 使用习惯也与微软Windows较类似 www gec edu org Linux下的桌面GUI KDE3 5可实现半透明和阴影效果 界面华丽 软件丰富 www gec edu org Linux下的桌面GUI 虽然在商业方面存在竞争 GNOME与KDE两大阵营的开发者关系并没有变得更糟 相反他们都意识到支持对方的重要性 无论是GNOME的开发者还是KDE的开发者 他们都有着共同的目标 就是为Linux开发最好的图形环境 只是因为理念之差而分属不同的阵营 KDE与GNOME阵营大约从2003年开始逐渐相互支持对方的程序 只要你在KDE环境中安装GTK库 便可以运行GNOME的程序 反之亦然 经过两年多的努力 KDE和GNOME都已经实现高度的互操作性 两大平台的程序都是完全共享的 例如你可以在GNOME中运行Konqueror浏览器 Koffice套件 也可以在KDE中运行Evolution和OpenOffice org 只不过执行本地程序的速度和视觉效果会好一些 www gec edu org Linux下的桌面GUI 开源社群的发展壮大为这些项目的未来发展奠定了坚实的基础 KDE项目将超越Windows作为自己的目标GNOME项目更是将开发目标定在超越MacOSX的Aqua图形环境 www gec edu org Linux下的桌面GUI VS KDE gnome www gec edu org 嵌入式GUI 在嵌入式系统中 GUI的地位也越来越重要 但是不同于桌面机系统 嵌入式GUI要求简单 直观 可靠 占用资源小且反应快速 以适应系统硬件资源有限的条件 另外 由于嵌入式系统硬件本身的特殊性 嵌入式GUI应具备高度可移植性与可裁减性 以适应不同的硬件条件和使用需求 总体来讲 嵌入式GUI具备以下特点 体积小 运行时耗用系统资源小 上层接口与硬件无关 高度可移植 高可靠性 在某些应用场合应具备实时性 www gec edu org 嵌入式GUI UNIX环境下的图形视窗标准为XWindowSystem Linux是类UNIX系统 所以顶层运行的GUI系统是兼容X标准的XFree86系统 好处是具有可扩展性 可移植性等优点 但对于嵌入式系统而言无疑太过庞大 累赘 低效 目前流行的嵌入式GUI与X思路不同 这些GUI一般不局限于X标准 更强调系统的空间和效率 www gec edu org 嵌入式GUI FrameBuffer是出现在2 2 xx内核当中的一种驱动程序接口 在2 4以后的内核中盛行该用法 尤其是2 6内核的嵌入式设备中 FrameBuffer是Linux控制台下的一个通用的图形接口 它拥有良好的平台无关性 可以支持绝大多数的硬件 因而得到愈来愈多厂家的支持 一些流行的图形库如QT GTK便是基于FrameBuffer的 它的接口非常简单 通过它可以十分方便地构建一个图形系统 特别适合嵌入式设备 www gec edu org 嵌入式GUI Linux是工作在保护模式下 所以用户态进程是无法像DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏 Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏 Framebuffer机制模仿显卡的功能 将显卡硬件结构抽象掉 可以通过Framebuffer的读写直接对显存进行操作 用户可以将Framebuffer看成是显示内存的一个映像 将其映射到进程地址空间之后 就可以直接进行读写操作 而写操作可以立即反应在屏幕上 这种操作是抽象的 统一的 用户不必关心物理显存的位置 换页机制等等具体细节 这些都是由Framebuffer设备驱动来完成的 但Framebuffer本身不具备任何运算数据的能力 就只好比是一个暂时存放水的水池 CPU将运算后的结果放到这个水池 水池再将结果流到显示器 中间不会对数据做处理 应用程序也可以直接读写这个水池的内容 www gec edu org 嵌入式GUI 目前在嵌入式系统比较流行的图形用户界面GUI Qt EmbeddedMicroWindowsMiniGUI www gec edu org Linux下的桌面GUI 2008年1月诺基亚为加强软件研发实力 斥资1 53亿美元收购了软件研发企业Trolltech QT成为诺基亚旗下的主力GUI平台 主页 www gec edu org QT快速入门 Qt EmbeddedQt Embedded以原始Qt为基础 并做了许多出色的调整以适用于嵌入式环境 Qt Embedded通过QtAPI与LinuxI O设施直接交互 成为嵌入式Linux端口 同Qt X11相比 Qt Embedded很省内存 因为它不需要一个X服务器或是Xlib库 它在底层抛弃了Xlib 采用framebuffer 帧缓冲 作为底层图形接口 同时 将外部输入设备抽象为keyboard和mouse输入事件 Qt Embedde的应用程序可以直接写内核缓冲帧 这避免开发者使用繁琐的Xlib Server系统 www gec edu org 嵌入式GUI 下图所示比较了Qt Embedded与Qt X11的架构区别 www gec edu org 嵌入式GUI MicrowindowsMicroWindows是一个开放源码的项目 采用MPL条款发布 类似LGPL条款 目前由美国CenturySoftware公司主持开发 MicroWindows的目的是把图形视窗环境引入到运行Linux的小型设备和平台上 作为XWindow的替代品 Microwindows可以使用更少的RAM和文件存储空间 100K 600K 提供与XWindow相似的功能 MicroWindows是一个基于典型客户 服务器体系结构的GUI系统 基本分为三层 最底层是面向图形输出和键盘 鼠标或触摸屏的驱动程序 中间层提供底层硬件的抽象接口 并进行窗口管理 最高层分别提供兼容于XWindow和WindowsCE Win32子集 的API 该项目的主要特色在于提供了类似X的客户 服务器体系结构 并提供了相对完善的图形功能 包括一些高级的功能 比如Alpha混合 三维支持 TrueType字体支持等 由于基本上用C语言实现 Microwindows的可移植性非常好 只有某些关键代码使用了汇编以提高速度 由于缺乏核心的维护人员 Microwindows也存在一些问题 代码质量不是很好 存在一些bug www gec edu org 嵌入式GUI www gec edu org 嵌入式GUI MiniGUI是由北京飞漫软件技术有限公司开发的面向实时嵌入式系统的轻量级图形用户界面支持系统 自1999年初遵循GPL条款发布第一个版本以来 MiniGUI已广泛应用于手持信息终端 机顶盒 工业控制系统及工业仪表 便携式多媒体播放机 查询终端等产品和领域 目前 MiniGUI已成为跨操作系统跨硬件平台的图形用户界面支持系统 可在Linux uClinux VxWorks eCos uC OS II pSOS ThreadX Nucleus OSE等操作系统以及Win32平台上运行 已验证的硬件包括ix86 ARM PowerPC MIPS DragonBall ColdFire等等 MiniGUIV2 0为基于嵌入式Linux的高端嵌入式设备提供了完整的多进程支持 从而将MiniGUI从中端市场带到了高端市场 最新的MiniGUIV3 0则是继2 0之后的一个重要增强 增加了如外观渲染器技术 双向文本支持 透明控件 独立滚动条控件 UPF字体和位图字体等新的特性 并新增两个组件mGUtils mGPlus www gec edu org MiniGUI的层次结构如下所示 嵌入式GUI www gec edu org 嵌入式GUI QTMiniGUIMicrowindows www gec edu org QT快速入门 www gec edu org Qt简介 Qt是诺基亚公司的标志性软件产品 是一个跨平台的C 图形用户界面 GUI 工具包Qt应用程序接口与工具兼容于所有支持平台 让开发员们掌握一个应用程序接口 便可执行与平台非相关的应用开发与配置Qt Windows WindowsXP 2000 NT4 Me 98 Qt Mac MacOSX Qt X11 Linux Solaris HP UX IRIX AIX等 Qt对不同平台的专门API进行了专门的封装 文件处理 网络等 www gec edu org Qt特征 一 面向对象Qt具有模块设计和注重软件构件或元素的可重用行的特点构件支持Qt提供信号 signal 和插槽 slot 概念 这是一种类型安全的方法 它允许回调 并支持对象之间在彼此不知道对方信息的情况下进行合作 这使得Qt非常适合于真正的构件编程友好的联机帮助Qt提供了大量的联机参考文档 有超文本HTML方式 也有Unix帮助页man手册页和补充说明 并且对于初学者 其中的指南将一步步介绍如何进行Qt编程 www gec edu org Qt特征 二 便利性由于Qt是一种跨平台的GUI工具包 它对编程者隐藏了在处理不同窗口系统时潜在的问题 Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题用户自定义使用其他的一些工具包经常会遇到这样一种情况 没有真正适合需求的组件 声称自定义的组件对用户来说就像一个黑匣子 而在Qt中生成用户自定义的组件非常简单 而且易于修改组件的行为国际化Qt为本地化应用提供了完全的支持 所有用户界面文本都可以基于消息翻译表被翻译成各国语言 Qt还支持双字节16bit国际字符标准 www gec edu org Qt特征 三 丰富的API函数Qt为专业应用提供了大量的函数 在Qt的API中含有大约300个C 类 大多数的类都是GUI专有的可用户化外观Qt支持主题 基于Qt的应用程序能够在Windows外观 Motif外观 以及其它一些用户化外观主题之间切换完整的一套组件工具Qt编程的基本模块称之为组件 组件是用户界面的组成部分 Qt含有用来创建专业外观的用户界面所需要的所有组件诺基亚公司提供两种授权模式 一种用于商业性质的授权 一种用于免费的开源授权 www gec edu org 创建第一个QT程序 打开一个终端 建立一个文件夹 如 mkdirhello然后进入这个文件夹 cdhello创建c 文件 vihello cpp在文件中键入下面的代码 include includeintmain intargc char argv QApplicationapp argc argv QPushButton hello newQPushButton HelloWorld 0 app setMainWidget hello hello show returnapp exec www gec edu org 接下来用qt的工具qmake来生成工程文件 qmake project接下来使用qmake生成Makefile文件 qmake接下来使用make生成目标可执行文件hello 运行程序 hello下面是界面 创建第一个QT程序 www gec edu org 代码详细分析 include这一行包含了QApplication类的定义 在每一个使用Qt的应用程序中都必须使用一个QApplication对象 QApplication包含在main 函数的事件循环体中 对所有来自Window系统和其它源文件的事件进行处理和调度 还包括处理应用程序的初始化和结束 并且提供会话管理 在Qt应用程序中 不管有多少个窗口 QApplication对象只能有一个 而且必须在其他对象之前创建 QApplication类中封装了很多函数 其中包括 系统设置 setFont 用来设置字体事件处理 sendEvent 用来发送事件GUI风格 setStyles 设置图形用户界面的风格颜色使用 colorSpec 用来返回颜色文件文本处理 translate 用来处理文本信息创建组件 setmainWidget 用来设置窗口的主组件 www gec edu org 代码详细分析 include这一行包含了QPushButton类的定义 参考文档的文件的最上部分提到了使用哪个类就必须包含哪个头文件的说明 QPushButton是一个经典的图形用户界面按钮 用户可以按下去 也可以放开 它管理自己的观感 就像其它每一个QWidget 一个窗口部件就是一个可以处理用户输入和绘制图形的用户界面对象 程序员可以改变它的全部观感和它的许多主要的属性 比如颜色 还有这个窗口部件的内容 一个QPushButton可以显示一段文本或者一个QPixmap www gec edu org 代码详细分析 intmain intargc char argv main 函数是程序的入口 几乎在使用Qt的所有情况下 main 只需要在把控制转交给Qt库之前执行一些初始化 然后Qt库通过事件来向程序告知诉用户的行为 argc是命令行变量的数量 argv是命令行变量的数组 这是一个C C 特征 它不是Qt专有的 无论如何Qt需要处理这些变量 请看下面 QApplicationapp argc argv a是这个程序的QApplication 它在这里被创建并且处理这些命令行变量 在任何Qt的窗口系统部件被使用之前创建QApplication对象是必须的 www gec edu org 代码详细分析 在QApplication之后 接着的是第一个窗口系统代码 创建一个按钮 QPushButtonhello Helloworld 0 或者QPushButton hello newQPushButton Helloworld 0 这个按钮被设置成显示 Helloworld 并且它自己构成了一个窗口 如果组件本身可以作为主窗口 则无需设置主窗口 在本例中 下压按钮创建时其构造函数中的第二个参数为0 表示按钮无父窗体 所在窗口即为主窗口 不需要设置主窗口 www gec edu org 代码详细分析 如果想设置该按钮的大小可以使用以下方法 hello resize 100 30 这个按酒被设置成100像素宽 30像素高 加上窗口系统边框 在这种情况下 我们不用考虑按钮的位置 并且我们接受默认值 如果需要设置控件的位置与大小 可以用以下方法 按钮控件为主窗体时无效 即父窗体不能为0时生效 hello setGeometry QRect 40 40 100 30 www gec edu org 代码详细分析 app setMainWidget hello 这个按钮被选为这个应用程序的主窗口部件 如果用户关闭了主窗口部件 应用程序就退出了 hello show 当创建一个窗口部件的时候 它是不可见的 你必须调用show 来使它变为可见的 returnapp exec 这里就是main 把控制转交给Qt 并且当应用程序退出的时候exec 就会返回 在exec 中 Qt接受并处理用户和系统的事件并且把它们传递给适当的窗口部件 www gec edu org QtDesigner Qt应用程序除了使用手工编写代码的方式外 还可以用Qt集成开发环境中的Desinger设计器来完成 QtDesigner的功能十分强大 界面类似于我们常用的VB 而且还提供了大量可供编程使用的组件 www gec edu org Designer快速创建Qt工程 安装完整版的RedHatEnterpriseLinux 系统将附带安装此工具 可以点击应用程序 编程 QtDesigner来找到它 或者在终端输入 designer启动 www gec edu org QtDesigner首先呈现给用户的是一个New Open对话框 因为这里要创建一个C 程序 所以在此选择C Project 点击 OK 继续 Designer快速创建Qt工程 www gec edu org 选择一个想要保存文件的位置 并且给出一个文件名 文件名的扩展名选择 pro 点击 OK 后 见到如下界面 Designer快速创建Qt工程 www gec edu org 如下是QtDesigner主窗口 确保PropertyEditor可见 如果不可见的 用户可以通过Windows Views PropertyEditor SignalHandlers选单选项来使其可见 Designer快速创建Qt工程 www gec edu org Designer快速创建Qt工程 通过菜单栏 选择File New Dialog 输入工程名及路径后 点击 OK 创建一个对话框窗体 此时该窗体的内容是空的 且标题栏和控件名均默认为 Form1 接下来通过鼠标拖曳窗体的边缘 将船体调整到想要的大小 再选取工具栏 Toolbox CommonWidgets PushButton 在窗体上画一个按钮控件并双击这个按钮将其显示文本改为 HelloWorld 点击快捷按钮Save进行保存 此时创建了一个新的窗体如下图所示 www gec edu org Designer快速创建Qt工程 www gec edu org Designer快速创建Qt工程 现在已经基本完成这个简单工程UI界面建立的步骤 在编译此应用程序之前 需要创建一个main cpp文件 方法是选择File New C Main File main cpp 只需接受缺省的配置即可 main cpp会自动在CodeEditor中打开 无需改变main cpp中的任何内容 保持默认 并且保存main cpp 到此为止 在QtDesigner中创建工程的工作已经全部完成 保存整个项目 下面来编译和运行这个程序 在编译程序之前 要首先生成它的Makefile文件 打开终端 然后切换至该项目的目录下 使用以下命令来生成Makefile文件 qmake www gec edu org 接下来执行make命令来编译程序 当编译工作完成后 输入 hello来运行程序 如果一切正常 可以看到以下界面 Designer快速创建Qt工程 www gec edu org Designer生成文件分析 通过Designer设计器设计QT工程首先我们创建了pro工程文件 设计出UI文件然后通过qmake工具自动生成Makefile工程管理文件 在Makefile中设置通过使用元对象工具UIC和MOC将工程中的UI文件转译成对应的 cpp h文件和moc文件 信号 槽的实现 www gec edu org Designer生成文件分析 Hello pro文件分析TEMPLATE app QT模板为appLANGUAGE C 工程文件路径为当前目录CONFIG qtwarn onrelease CONFIG的配置模块 一般采用默认即可 QT运行系统环境设置unix Unix系统环境则执行以下内容UI DIR ui Ui文件的存放目录MOC DIR moc Moc文件的存放目录OBJECTS DIR obj 工程目标 o文件的存放目录 SOURCES main cpp 工程文件源码包含main cppFORMS form1 ui 工程UI文件包含form1 ui www gec edu org Designer生成文件分析 main cpp文件内容如下 include 包含QT窗口类的头文件qapplication h include form1 h 包含窗口1的类原型声明头文件form1 hintmain intargc char argv 主函数入口 QApplicationa argc argv 创建QApplication对象a 对窗口程序进行管理Form1w 创建窗口1的对象ww show 调用对象w的父类成员方法show 进行窗口显示 下面使用connect方法将对象a的最后一个窗口的关闭信号与系统槽函数quit 进行连接a connect 调用对象a的exec 方法进行窗口执行与切换 www gec edu org Designer生成文件分析 通过uic工具自动转译成的form1 h头文件内容如下 ifndefFORM1 H 文件标识宏 defineFORM1 H 包含QT相关头文件 include include 被引用的类体的前置声明classQVBoxLayout classQHBoxLayout classQGridLayout classQSpacerItem classQPushButton 类Form1的原型声明 从QDialog父类公有继承classForm1 publicQDialog Q OBJECT 声明Q OBJECT宏 支持信号槽机制 www gec edu org Designer生成文件分析 公有成员方法public 构造函数Form1 QWidget parent 0 constchar name 0 boolmodal FALSE WFlagsfl 0 析构函数 Form1 定义一个QPushButton类型的按钮对象QPushButton pushButton1 protected protectedslots 受保护的槽函数virtualvoidlanguageChange 用于显示文本信息的虚函数 实现多态继承 endif FORM1 H 文件标识宏 www gec edu org Designer生成文件分析 Form1 cpp文件内容如下 include form1 h 包含类form1的原型声明的头文件 包含各引用类的原型声明的头文件 include include include include include include include Form1的构造函数Form1 Form1 QWidget parent constchar name boolmodal WFlagsfl QDialog parent name modal fl if name 如若窗口未定义名称setName Form1 设置默认窗体名称为 Form1 www gec edu org Designer生成文件分析 pushButton1 newQPushButton this pushButton1 实例化一个新的按钮pushButton1 setGeometry QRect 70 60 211 61 设置该按钮的位置属性languageChange 显示控件上的文本信息resize QSize 354 199 expandedTo minimumSizeHint 设置窗口显示属性 从QSize 354 199 和minimumSizeHint 返回一个QSize对象 中取两者之中的最大宽度和最大高度组成一个新的QSize对象 clearWState WState Polished 常见于用Designer生成的代码中 由于WState Polished是一个内部标志 在用户的代码中一般不要使用它 Form1 Form1 析构函数 noneedtodeletechildwidgets Qtdoesitallforus voidForm1 languageChange 显示空间文本信息 setCaption tr Form1 pushButton1 setText tr HelloWorld 在按键上显示HelloWorld www gec edu org Qt的事件 Qt部件不同于其他用户交互方式的GUI工具包 用户交互方式是所有GUI Graphicaluserinterface 应用程序关心的问题 通过将某种用户事件 比如按下鼠标 与程序事件 比如退出程序 联系起来 使用户能够在图形面中只使用鼠标来控制程序 而其他工具包是利用回调函数来进行用户交互的 回调函数是指 按照一定的形式由开发人员定义并编写实现内容 使用回调函数 实际上就是在调用某个函数 通常是API函数 时 将自己的一个函数 也就是回调函数 的地址作为参数传递给那个函数 而那个函数在需要的时候 也就是某种事情发生的时候 利用传递的函数地址调用回调函数 这时开发人员可以利用这个机会在回调函数中处理消息或完成一定的操作 回调函数只能是全局函数 或者

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论