图形用户接口_第1页
图形用户接口_第2页
图形用户接口_第3页
图形用户接口_第4页
图形用户接口_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

图形用户接口第一页,共一百一十四页,编辑于2023年,星期二定义图形用户接口(GraphicsUserInterface,GUI),又叫桌面系统、窗口管理系统、图形操作环境、图形用户界面等,是操作系统和用户的人机接口。GUI极大地方便了非专业用户的使用,人们不再需要死记硬背大量的命令,而可以通过窗口、菜单方便地进行操作。第二页,共一百一十四页,编辑于2023年,星期二13.1图形用户接口的层次结构第三页,共一百一十四页,编辑于2023年,星期二13.1.1图形基础设施图形基础设施是一种底层的图形驱动引擎,一般是由操作系统提供。它是用作其他更高一层图形或者图形应用程序的基本函数库/依赖库,在其之上可以针对某些特定应用需求做进一步的封装。譬如,在对于只需要单任务的低端应用,可以以API函数的形式,封装成静态或者动态的高级图形函数库。而在更多的场合,用户是需要类似Windows的桌面系统,这样就要构建多任务GUI窗口管理系统。在Linux环境下,常见的图形基础设施有SVGALib(VGA)、XWindow(Xlib)、LibGGI和FrameBuffer等。第四页,共一百一十四页,编辑于2023年,星期二13.1.2高级图形函数库

高级图形函数库提供的图形界面编程接口主要分为两大类,一类只提供基本的画点绘线、文本区域处理等,如SDL(standarddrawinglibrary);另一类就是以窗口部件(widget,亦称为控件、部件等)形式,采用面向对象方式进行可视化的编程,可用于嵌入式GUI系统(需要诸如pThread等消息处理函数库的支持)和可以运行在GUI系统上的应用程序的开发,诸如GTK,QT和PEG等。第五页,共一百一十四页,编辑于2023年,星期二13.1.3GUI窗口管理系统

GUI窗口管理系统是一个非常复杂的系统,很多时候甚至就类似于一个操作系统,它是嵌入式系统设计中迄今为止没有很好解决的难点之一。目前,在桌面GUI系统领域主要有X-Windows、KDE、GNOME等,在嵌入式系统领域,主要有MiniGUI、Nano-X(Microwindows)、OpenGUI和Qpe(QtPalmtopEnvironment)等。第六页,共一百一十四页,编辑于2023年,星期二13.2桌面Linux系统中GUIKDE(KoolDesktopEnvironment)与GNOME(GNUNetworkObjectEnvironment)是目前桌面Linux/UNIX系统中最常用的桌面GUI窗口系统。MiniGUI、Qt/E和Nano-X则是嵌入式系统中广泛应用的嵌入式GUI系统。第七页,共一百一十四页,编辑于2023年,星期二13.2.1KDEKDE是1996年德国MatthiasEttrich发起了符合GPL规范的开源项目,与之前各种基于XWindow的图形用户环境不同的是,KDE并非针对系统管理员等高级用户,而是锁定为普通的终端用户,即希望KDE能够包含用户日常应用所需要的所有应用程序组件,例如Web浏览器、电子邮件客户端、办公套件、图形图像处理软件等。第八页,共一百一十四页,编辑于2023年,星期二13.2.2GNOMEGNOME是1997年墨西哥年仅26岁的程序员MiguelDeIcaza发起的开源项目,目前诸如RedHat/Fedora、SuseLinux发行版都默认使用它。它功能上的特性和KDE类似,并且相对要轻便些第九页,共一百一十四页,编辑于2023年,星期二13.3嵌入式Linux系统GUI在现代的嵌入式人机系统中,人是用户和主动的参与者,能与机器对话,要求机器对人的各种动作做出响应。因此,图形用户界面已经成为嵌入式应用系统研制中的重点之一。典型的嵌入式GUI系统有紧缩的XWindow系统、MiniGUI、Nano-X(MicroWindows)、TinyX(紧缩版的X-Windows)、OpenGUI、QT/Embedded等.第十页,共一百一十四页,编辑于2023年,星期二13.3.1MiniGUIMiniGUI是1998年底推出的一款面向嵌入式系统或者实时系统的GUI系统,是国内最早出现的、在国际上有一定知名度的几个自由软件项目之一,最先是由原清华大学教师魏永明先生主持开发,现由北京飞漫软件技术有限公司()进行商业化维护和运作。自1999年初以遵循GPL协议发布第一个版本以来,到现在已历经十年多时间,目前最新版本是MiniGUIV3.0.12。经过飞漫软件多年的精心打造,MiniGUI已经成为性能优良、功能丰富的跨操作系统嵌入式图形用户界面支持系统。目前,MiniGUI已经广泛应用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。一些企业如华为、中兴通讯、大唐移动、长虹等已经成功的使用MiniGUI进行产品开发,约有60%获得入网许可证的TD-SCDMA手机使用MiniGUI作为其嵌入式图形平台,以支撑浏览器、可视电话等3G应用软件的运行。第十一页,共一百一十四页,编辑于2023年,星期二北京飞漫软件技术有限公司提供详细的技术文档支持MiniGUI的应用。有关MiniGUI3.0更多的内容请登录/products/minigui/trial_downloads.html,查阅以下技术文档:1.MiniGUI技术白皮书forV3.02.DatasheetforMiniGUIV3.03.MiniGUI3.0编程指南4.MiniGUI3.0用户手册5.《MiniGUIAPI参考手册》V3.0.12进程版6.《MiniGUIAPI参考手册》V3.0.12线程版7.《MiniGUIAPI参考手册》V3.0.12单机版8.《mGPlusAPI参考手册》V1.2.4第十二页,共一百一十四页,编辑于2023年,星期二13.3.2

Qtopia

Qtopia是嵌入式GUI窗口系统,也叫做嵌入式Linux的桌面系统,是Trolltech面向嵌入式设备的Qt掌上机环境(QtPalmtopEnvironment,Qpe)。它建立在Qt/Embedded(即Qt/E)之上,基于Qt/E开发出来的程序就可以放到这个桌面上,为开发提供了一个类似于Windows这样易于使用的界面。Qtopia分为开源的PDA版本Qtopia和收费的手机版Qtopia,前者提供PDA的桌面系统基本源代码,后者还包括手机模块代码等。第十三页,共一百一十四页,编辑于2023年,星期二13.3.3Nano-X

Nano-X的前身就是CenturySoftware推出的开源项目Microwindows。它主要采用C语言进行开发,采用C/S体系结构,提供了相对完善的图形功能,并且具有分层设计。最底层是屏幕和输入设备驱动程序(关于键盘或鼠标)来与实际硬件交互。在中间层,可移植的图形引擎提供对线的绘制、区域的填充、多边形、裁剪以及颜色模型的支持。第十四页,共一百一十四页,编辑于2023年,星期二13.4MiniGUI应用入门

13.4.1MiniGUI的软件架构

MiniGUI具有良好的软件架构,通过抽象层将MiniGUI上层和底层操作系统隔离开来。如图13.4.1所示,基于MiniGUI的应用程序一般通过ANSIC库、操作系统和驱动程序接口以及MiniGUI自身提供的API来实现自己的功能;MiniGUI中的“可移植层”可将特定操作系统及底层硬件的细节隐藏起来,而上层应用程序则无需关心底层的硬件平台输出和输入设备。第十五页,共一百一十四页,编辑于2023年,星期二图13.4.1MiniGUI的层次结构第十六页,共一百一十四页,编辑于2023年,星期二1.图形抽象层(GraphicsAbstractionLayer,GAL)

图形抽象层将来自不同操作系统或设备的图形接口进行抽象,为MiniGUI上层提供统一的图形接口。在图形抽象层内,包含有针对LinuxFB设备、eCosLCD设备等的软件组成部分。这些软件组成部分通过调用底层设备的接口来实现具体的图形抽象层操作,如打开设备、设置分辨率及显示模式、关闭设备等。这些用于适配图形抽象层接口的软件组成部分被称为“引擎(engine)”,其概念和操作系统中的设备驱动程序类似。第十七页,共一百一十四页,编辑于2023年,星期二2.输入抽象层(InputAbstractionLayer,IAL)

与GAL类似,输入抽象层将MiniGUI涉及的所有输入设备,如键盘(keyboard)、小键盘(keypad)、鼠标(mouse)、触摸屏(touchscreen)等抽象了出来,为上层提供一致的接口。要支持不同的键盘、触摸屏或者鼠标接口,则通过为IAL编写不同的输入引擎实现。MiniGUI通过IAL及其输入引擎,提供对Linux控制台(键盘及鼠标)、触摸屏、遥控器、小键盘等输入设备的支持。第十八页,共一百一十四页,编辑于2023年,星期二3.图形设备接口(GraphicsDeviceInterfaces,GDI)

该模块基于图形抽象层为上层应用程序提供图形相关的接口,如绘制曲线、输出文本、填充矩形等等。图形设备接口中含包含其他比较独立的子模块,如字体字符集(fontandcharset)支持、图像(image)支持等。4.消息处理模块(MessagingModule)

该模块在输入抽象层基础上,实现了MiniGUI的消息处理机制,为上层提供了完备的消息管理接口。众所周知,几乎所有的GUI系统本质上都是事件驱动的,系统自身的运行,以及GUI应用程序的运行,都依赖于消息处理模块。第十九页,共一百一十四页,编辑于2023年,星期二5.多窗口处理模块(WindowingModule)和控件(Control或Widget)基于图形设备接口和消息处理模块,MiniGUI实现了多窗口处理模块。该模块为上层应用程序提供了创建主窗口和控件的基本接口,并负责维护控件类。控件类是用来实现控件代码重用的重要概念,利用控件类(controlclass),我们可以创建属于某个控件类的多个控件实例(instance),从而让这些控件实例使用同一个控件类的代码,这样,我们就实现了类似C++那样的类和实例概念,从而可以最大程度上重复利用已有代码,并提高软件的可维护性。MiniGUI的控件模块实现了常见的GUI控件,如静态框、按钮、编辑框、列表框、下拉框等等。6.外观支持(LookandFeel)这个模块是MiniGUIV3.0提供给上层应用程序的接口,可用来定制MiniGUI窗口、控件的绘制。在MiniGUIV3.0之前的版本中,对主窗口和控件的定制能力,还没有被抽离出来形成独立的模块,但我们仍然可以通过配置选项让MiniGUI的主窗口、控件具有三种显示风格,分别是:类似PC的三维风格(PC3D)、平板风格(FLAT)、流行风格(FASHION)。在MiniGUI3.0中,主窗口和控件的外观可完全由应用程序自行定制,在创建主窗口或者控件时,指定外观渲染器(renderer)的名称,就可以让主窗口或者控件具有各自不同的外观。第二十页,共一百一十四页,编辑于2023年,星期二5.多窗口处理模块(WindowingModule)和控件(Control或Widget)

基于图形设备接口和消息处理模块,MiniGUI实现了多窗口处理模块。该模块为上层应用程序提供了创建主窗口和控件的基本接口,并负责维护控件类。控件类是用来实现控件代码重用的重要概念,利用控件类(controlclass),我们可以创建属于某个控件类的多个控件实例(instance),从而让这些控件实例使用同一个控件类的代码,这样,我们就实现了类似C++那样的类和实例概念,从而可以最大程度上重复利用已有代码,并提高软件的可维护性。MiniGUI的控件模块实现了常见的GUI控件,如静态框、按钮、编辑框、列表框、下拉框等等。第二十一页,共一百一十四页,编辑于2023年,星期二13.4.2MiniGUI的开发环境

基于MiniGUI

的开发可以在Linux或Windows操作系统下进行。由于MiniGUI

完全用C来编写,具有非常好的移植性,也使得MiniGUI

应用程序的交叉编译工作十分方便。为嵌入式设备编写的应用程序可以在任何安装在针对该设备的交叉编译工具链的平台上进行编译。最常见的方式是在Linux环境下安装gcc的交叉编译器,对应用程序进行编译。对于某些嵌入式系统(如VxWorks,uC/OS-II),则一般在Windows下安装相应的编译环境(如Tornado、ADS等),对应用程序进行编译。如果MiniGUI

应用程序在Linux环境下开发,它可以有两种运行方式。一种是直接在内核支持的FrameBuffer控制台下运行,一种则是在一个模拟FrameBuffer

的X11应用程序(qvfb)下运行并完成调试。第二十二页,共一百一十四页,编辑于2023年,星期二如果MiniGUI

应用程序在Windows下开发,则可以使用VisualStudio集成开发环境进行开发及编译,并在模拟FrameBuffer

的Windows应用程序(wvfb)下运行应用程序并调试(如图13.4.2所示)。

第二十三页,共一百一十四页,编辑于2023年,星期二图13.4.2在wvfb模拟器上运行MiniGUI应用程序直接在模拟器或控制台下运行调试MiniGUI应用程序,大大方便了嵌入式程序的开发,避免了用户重复刷写嵌入式设备的工作。同时也使得用户可以在开发主机上使用标准的调试器对应用程序进行调试。MiniGUIV3.0推出的xvfb兼容MiniGUIV2.0.X以前的qvfb,wvfb。

第二十四页,共一百一十四页,编辑于2023年,星期二13.4.3MiniGUI的移植1.PC机上配置,编译,安装,运行MiniGUI(1)在redhat9.0上配置FrameBuffer

要激活VESAFrameBuffer驱动程序,需要修改/boot/grub/menu.lst文件,并在kernel打头的一行添加vga=0x0317.

其中RedHatLinux(2.4.20-8,FrameBuffer)就是设置了VESAFrameBuffer的引导选项。第二十五页,共一百一十四页,编辑于2023年,星期二(2)在PC上编译并安装MiniGUI开发包第一步,在PC上编译并安装libminigui第二步,在PC上安装MiniGUI的资源第三步,编译应用程序例子第二十六页,共一百一十四页,编辑于2023年,星期二(3)Redhat上MiniGUI的运行由于必须要在控制台模式才能运行MiniGUI。要启动控制台,按住Ctrl+Alt的同时,按F1~F6中的任意一个均可,然后登录系统,进入sample目录,直接运行即可。第二十七页,共一百一十四页,编辑于2023年,星期二2.交叉编译,并在嵌入式目标机上运行MiniGUI(1)交叉编译libminigui(2)安装MiniGUI资源文件(3)编译应用程序例子(4)在嵌入式目标机上运行MiniGUI第二十八页,共一百一十四页,编辑于2023年,星期二13.4.4MiniGUI的运行模式MiniGUI是采用C语言开发的,为了适合不同的操作系统环境,MiniGUI可以配置成三种不同的运行模式。(1)MiniGUI-Threads模式运行在MiniGUI-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或者地址空间中运行。这种运行模式非常适合于大多数传统意义上的嵌入式操作系统,比如μC/OS-II、eCos、VxWorks、pSOS等等。当然,在Linux和μClinux上,MiniGUI也能以MiniGUI-Threads的模式运行。(2)MiniGUI-Processes模式该模式在1.6.8及早期版本中称为“MiniGUI-Lite”,它与MiniGUI-Threads相反,MiniGUI-Processes上的每个程序是独立的进程,每个进程也可以建立多个窗口。MiniGUI-Processes适合于具有完整UNIX特性的嵌入式操作系统,比如嵌入式Linux。第二十九页,共一百一十四页,编辑于2023年,星期二(3)MiniGUI-Standalone模式在Standalone模式,MiniGUI可以以独立进程的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用μClinux的嵌入式产品中。一般而言,MiniGUI-Standalone模式的适用面最广,可以支持几乎所有的操作系统(目前只用来提供对Linux/μClinux操作系统的支持);MiniGUI-Threads模式的适用面次之,可运行在支持多任务的实时嵌入式操作系统,或是具备完整UNIX特性的普通操作系统;MiniGUI-Process模式的适用面较小,它仅适合具备完整UNIX特性的嵌入式操作系统,如Linux。但不论采用哪种运行模式,MiniGUI为上层应用程序提供了最大程度上的一致性,只有少数几个涉及初始化的接口在不同运行模式上有所不同。第三十页,共一百一十四页,编辑于2023年,星期二13.5.Qt应用入门

13.5.1Qt支持的平台QtSoftware前身属于始创于1994年的Trolltech,1996年Qt上市。Trolltech于2008年6月被Nokia收购()。目前Qt是一个已经形成事实上的标准的C++框架,用于高性能的跨平台软件开发,Qt已成为数以万计的商业和开源应用程序的基础。Qt是一个跨平台的应用程序和UI框架,它包括跨平台类库、集成开发工具和跨平台IDE。使用Qt您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统(如EmbeddedLinux,MacOS,Windows,Linux/X11,WindowsCE,Symbian,Maemo等)部署这些应用程序。其中:第三十一页,共一百一十四页,编辑于2023年,星期二13.5.Qt应用入门

13.5.1Qt支持的平台1.QtforEmbeddedLinuxQtforEmbeddedLinux®是用于嵌入式Linux(EmbeddedLinux)所支持设备的应用程序架构,可以使用Qt创建具有独特用户体验的具备高效内存效率的设备和应用程序。Qt可以在任何支持Linux的平台上运行。Qt除了提供所有工具以及API与类库,(如QtWebKit)外,QtforEmbeddedLinux®还提供用于最优化嵌入式开发环境的主要组件。第三十二页,共一百一十四页,编辑于2023年,星期二Qt构建在标准的API上,应用于嵌入式Linux设备,并带有自己的紧凑视窗系统(QWS)。利用Qt的API,只须少数几行代码便可以实现高端的功能。基于Qt的应用程序可直接写入Linux帧缓冲,可减少内存消耗,可利用硬件加速图形的优势,可编译移除不常使用的组件与功能,解除了对X11视窗系统的需求。QtforEmbeddedLinux®提供一个虚拟帧缓冲器(QVFb),可以采用点对点逐像素匹配物理设备显示。IPC(进程间通讯)可以创建丰富的多应用程序用户体验。Qt支持嵌入式Linux上的多种字体格式,包括:TrueType®,Postscript®Type1与Qt预呈现字体。Qt扩展了Unicode支持,包括:构建时自动数据抽取,运行时自动更新。另外Qt还提供定制字体格式的插件,允许在运行时轻松添加新字体引擎。应用程序间的字体共享功能可以提高内存效率。第三十三页,共一百一十四页,编辑于2023年,星期二采用QtforEmbeddedLinux®创建的应用程序可以移植到WindowsCE

和Qt支持的

其它任何操作系统上。QtforEmbeddedLinux®的基本要求如下:开发环境:Linux

内核2.4或更高,GCC版本3.3或更高,用于MIPS®GCC版本3.4.或更高。占用存储空间:存储空间取决于配置,压缩后:1.7-4.1MB,未压缩:3.6-9.0MB硬件平台:易于载入任何支持带C++编译器和帧缓冲器驱动Linux的处理器。支持ARM®,x86®,MIPS®,PowerPC®。注意:对于Qt5.0,QtforEmbeddedLinux®将不作为一个单独的平台存在。目前Qt的版本为4.8。第三十四页,共一百一十四页,编辑于2023年,星期二2.Linux/X11QtQt是综合性的应用程序和UI框架,用于开发Linux®/X11应用程序,无须重新编写源代码,便可跨其他桌面和嵌入式操作系统进行部署。Qt支持多种X11平台,如Solaris、AIX、HP-UX和即将推出的Maemo6。Qt提供跨平台QtIDE、拖放可视化GUI构建器、翻译工具、可定制的HTML帮助文件阅读器、集成的Eclipse和KDevelopIDE。Qt提供的集成开发工具,可加快在X11平台上的开发。第三十五页,共一百一十四页,编辑于2023年,星期二Qt类库包括用来生成高级GUI应用程序所需的所有功能:一整套可定制的UI控件或widget;集成了OpenGL,支持3D图形;强大的多线程功能;可处理上百万个对象的2D图形画布;集成了Phonon多媒体框架;WebKit集成;网络、XML和数据库功能;ECMA标准脚本引擎。第三十六页,共一百一十四页,编辑于2023年,星期二3.WindowsQtQt是综合性的应用程序和UI框架,用于开发Windows®应用程序,无须重新编写源代码,便可跨其他桌面和嵌入式操作系统进行部署。Qt应用程序支持WindowsVista、Server2003、XP、NT4、Me/98和WindowsCE。Windows的Qt包含有:直观的类库;集成的开发工具;集成VisualStudio;在Qt应用程序中使用ActiveX控件;集成了用于图形硬件加速的Direct3D。第三十七页,共一百一十四页,编辑于2023年,星期二QtVisualStudioIntegration可使程序员在MicrosoftVisualStudio2005、2008和2010环境下创建、生成、调试和运行Qt项目,包含有:代码完成和语法标识功能;使用集成的QtDesigner的强大的GUI布局和格式构建器;集成了VisualStudio在线帮助的Qt文档;最常用的Qt应用程序样式模板。第三十八页,共一百一十四页,编辑于2023年,星期二Qt类库包括用来构建高级GUI应用程序所需的所有功能,包含有:一整套可定制的UI控件或widget;使用OpenGL®或Direct3D®的3D图形支持;强大的多线程功能;可处理上百万个对象的2D图形画布;集成了Phonon多媒体框架;WebKit集成;网络、XML和数据库功能;ECMA标准脚本引擎。第三十九页,共一百一十四页,编辑于2023年,星期二Qt包括一套集成的开发工具,可加快在Windows平台上的开发,包含有:跨平台QtIDE;拖放可视化GUI构建器;国际化和翻译工具;可定制的HTML帮助文件阅读器。第四十页,共一百一十四页,编辑于2023年,星期二13.5.2Qt的授权Qt主要是由诺基亚QtDevelopmentFrameworks部门开发和维护的。诺基亚通过开源授权(LGPL(GNU宽通用公共授权)和GPL(GNU通用公共授权))以及商业授权的方式对Qt进行授权,这样开源项目就可以使用Qt进行开发。Qt产品规划和源代码库现都已面向公众开放,这样Qt开发人员就可以通过为Qt和Qt相关的项目提供代码、翻译、示例和其他方式的贡献,协助引导和明确Qt未来发展方向(http://qt.gitorious.org)。Qt通过商业、LGPL和GPL3种授权方式提供Qt产品。按照授权协议的不同,Qt被按不同的版本发行。

Qt商业版用于商业软件的开发,提供免费升级和技术支持服务。第四十一页,共一百一十四页,编辑于2023年,星期二Qt开源版是Qt的非商业版本,是为开发自由和开放源码软件提供的Unix/X11版本。在GNUGPL或LGPL许可证下,它可以免费下载和使用。如果是基于GPL协议来开发软件的话,用户所开发的东西都要以GPL协议发布—开源并免费提供源码。此外,Qt还提供了免费评估版、快照、beta测试版、预览版等多种版本。其中免费评估版Qt适用于Windows、Mac、Linux、嵌入式Linux和WindowsCE平台,它不但具备全部功能,还带有源代码。Nokia会在用户进行评估期间提供技术支持。而快照、beta测试版、预览版等版本则得不到Qt的支持。第四十二页,共一百一十四页,编辑于2023年,星期二

Qt开源版和商业版有如下不同:功能不完全相同。在源码上两者基本一致,但是开源版缺少一些数据库插件,因为这些插件都是基于特定数据库客户端程序的,由于很多商业数据库的客户端程序并不是开源的,所以插件就无法开源。一般开源版不支持商业数据库的驱动,需要自己写驱动或者是采用第三方的驱动。另外,在Windows版本上,开源版没有ActiveQt这个模块,它可以用来开发ActiveX程序。收费不同。开源版不收费。商业版根据版本不同,费用不同。服务不同。开源版不提供服务,但可以到一些开放的maillist和论坛讨论;商业版有一年的免费技术和下载支持,有问题就直接发给support@。最本质的不同是协议不同。使用开源版开发需要遵循GPL或者QPL,而使用商业版就没有这个限制。第四十三页,共一百一十四页,编辑于2023年,星期二Qt4.5版本以后,Qt的安装有了多种选择,既可以通过源代码包来编译安装,也可以利用Qt官方网站提供的最新SDK来实现安装。QtSDK包括了Qt库、QtCreatorIDE和Qt工具,QtSDK的架构如图13.5.1所示。

图13.5.1QtSDK的架构第四十四页,共一百一十四页,编辑于2023年,星期二登录到Qt的官方网站(/downloads-cn),在打开的页面上,如图13.5.2所示,可以选择适合你平台的程序,进行下载和安装。图13.5.2QtSDK和Qt下载页面第四十五页,共一百一十四页,编辑于2023年,星期二13.5.3QtCreator1.QtCreator简介QtCreator在2009年3月3日正式发布(连同Qt4.5),并提供LGPL许可的源代码。QtCreator是Qt被Nokia收购后推出的一款全新的跨平台开源IDE(集成开发环境),是QtSDK的一部分。QtCreator的设计目标是帮助新Qt用户更快速入门并运行项目,使开发人员能够利用Qt这个应用程序框架更加快速及简易地完成任务,提高工作效率。由于捆绑了最新Qt库二进制软件包和附加的开发工具,并作为QtSDK的一部分,QtCreator在单独的安装程序内提供了进行跨平台Qt开发所需的全部工具。QtCreator包括:高级C++和JavaScript代码编辑器,集成用户界面设计器,项目和构建管理工具,gdb和CDB调试程序的支持,版本控制的支持,移动用户界面模拟器,为桌面和移动目标平台提供支持。第四十六页,共一百一十四页,编辑于2023年,星期二QtCreator具有如下特色:代码编辑器支持代码高亮以及自动完成功能;Qt4工程向导(ProjectWizard)。使用ProjectWizard,用户可以轻松创建基于控制台的应用程序,GUI应用程序以及C++类库等多种类型的工程;无缝集成了QtDesigner,使用者不用单独打开QtDesigner即可完成用户界面的创建工作。用户只需在ProjectExplorer中双击.ui文件,即可调用集成的QtDesigner完成编辑工作;帮助文件浏览器QtAssistant可以查阅相关的Qt文档和示例程序;集成版本控制器,如git;SVN;提供GDB和CDB侦错程式图形界面前端,可以使用GNU的GDB(开源版)以及Microsoft的CDB作为调试器(商业版);默认使用qmake构建项目,也可支持CMake等其他构建工具。qmake工程文件格式化功能支持将.pro文件作为工程描述文件;使用g++作为编译器。第四十七页,共一百一十四页,编辑于2023年,星期二QtCreator一般与QtSDK一起安装。也可以选择Nokia提供的独立安装程序来安装。登录到Qt的官方网站(/downloads-cn),打开的页面如图13.5.3所示,然后选择适合你平台的程序,进行下载和安装。图13.5.3QtCreator下载页面第四十八页,共一百一十四页,编辑于2023年,星期二2.QtCreator的组成QtCreator主要由菜单(MenuBar)、模式选择器(ModeSelectors)、项目浏览器(ProjectInspector)、代码编辑器(CodeEdit)、输出面板(OutputPane)、边栏(Sidebar)、快速导航面板(QuickOpenPane)等组件构成。在编辑模式下,QtCreator界面的主要的组成部分如图13.5.4所示。图13.5.4QtCreator的界面第四十九页,共一百一十四页,编辑于2023年,星期二3.QtCreator的模式选择器QtCreator2.4.1有七种工作模式,分别是WelcomeMode、EditMode、DesignMode、DebugMode、ProjectMode、AnalyzeMode和HelpMode。模式选择器(ModeSelectors)允许开发者在处理不同的任务时,可以快速切换工作模式,比如编辑代码、浏览帮助、设置编译器环境等。在切换时,可以通过在界面左边的模式选择器分栏上单击或使用相对应的快捷键。(1)欢迎模式(WelcomeMode)Welcome模式的界面如图13.5.5所示。在Welcome模式,可以实现以下功能:阅读QtLabsBlog上的新闻打开样例工程创建和打开工程向QtCreator项目组反馈意见打开新近使用的项目第五十页,共一百一十四页,编辑于2023年,星期二图13.5.5Welcome模式的界面第五十一页,共一百一十四页,编辑于2023年,星期二(2)编辑模式(EditMode)Edit模式的界面如图13.5.6所示。在Edit模式,用户可以编辑项目和源代码文件。可以利用在模式选择器右边的边栏来实现文件导航。

图13.5.6Edit模式的界面第五十二页,共一百一十四页,编辑于2023年,星期二(3)设计模式(DesignMode)Design模式的界面如图13.5.7所示。Design模式可以用来设计和开发用户界面,主要是由(.ui)文件来表示。图13.5.7Design模式的界面第五十三页,共一百一十四页,编辑于2023年,星期二(4)调试模式(DebugMode)Debug模式的界面如图13.5.8所示。Debug模式主要用来辅助程序员观察应用程序的状态,以此来调试程序。图13.5.8Debug模式的界面第五十四页,共一百一十四页,编辑于2023年,星期二(5)项目模式(ProjectMode)Project模式的界面如图13.5.9所示。在Project模式,开发者可以查看所有项目的列表,并可以设置某一个项目为当前的活动项目。还可以针对选择的项目,进行构建(build)、运行(run)以及代码编辑器等多个方面的详细设置。图13.5.9Project模式的界面第五十五页,共一百一十四页,编辑于2023年,星期二(6)分析模式(AnalyzeMode)Analyze模式的界面如图13.5.10所示。在Analyze模式,开发者可以使用代码分析工具来检测内存泄露和构建C++和QML代码架构。图13.5.10Analyze模式的界面第五十六页,共一百一十四页,编辑于2023年,星期二(7)帮助模式(HelpMode)Help模式的界面如图13.5.11所示。在Help模式的界面中,主要集成了Qt文档和示例中的相关内容,可以使用户不必另行打印QtAssistant,就可以在QtCreator的Help模式下获得帮助。图13.5.11Help模式的界面第五十七页,共一百一十四页,编辑于2023年,星期二13.5.4QtDesigner1.QtDesigner简介QtDesigner是强大的跨平台GUI布局和格式构建器。QtDesigner是QtSDK的组成部分之一。QtDesigner的功能和优势如下:使用拖放功能快速设计用户界面;定制widget,或从标准widget库中选择widget;以本地外观快速预览格式;通过界面原型生成C++或Java代码;可以将QtDesigner与VisualStudio或EclipseIDE配合使用;使用Qt信号与槽机制构建功能齐全的用户界面。QtDesigner是一个可视化的基于Qt的用户界面设计工具,是QtSDK的一部分,用来生成.ui定义文件,而不考虑具体的语言。第五十八页,共一百一十四页,编辑于2023年,星期二QtDesigner是一个所见即所得的全方位GUI构造器,它所设计出来的用户界面能够在多种平台上使用。利用QtDesigner,可以拖放各种Qt控件构造图形用户界面并可预览效果。使用QtDesigner,开发人员既可以创建“对话框”样式的应用程序、又可以创建带有菜单、工具栏、气球帮助以及其他标准功能的“主窗口”样式的应用程序。QtDesigner提供了多种窗体模板,开发人员可以创建自己的模板,确保某一应用程序或某一系列应用程序界面的一致性。编程人员可以创建自己的自定义窗体,这些窗体可以轻松与QtDesigner集成。QtDesigner支持采用基于窗体的方式来开发应用程序。窗体是由用户界面(.ui)文件来表示的,这种文件既可以转换成C++并编译成一个应用程序,也可以在运行时加以处理,从而生成动态用户界面。Qt的构建系统能将用户界面的编译构建过程自动化,使设计过程更轻松。第五十九页,共一百一十四页,编辑于2023年,星期二2.QtDesigner的组成QtDesigner主要由窗口部件盒、对象查看器、属性编辑器、资源浏览器、动作编辑器和信号/槽编辑器组成,且它们都是锚接窗口,通常排列在窗体的两侧,也可以定制它们的位置。打开的QtDesigner的界面如13.5.12所示。利用QtDesigner,可以拖放各种Qt控件构造图形用户界面并可以预览效果。

13.5.12QtDesigner的界面第六十页,共一百一十四页,编辑于2023年,星期二3.QtDesigner的使用使用QtDesigner设计窗体的步骤如下:(1)启动QtDesigner。在安装QtSDK之后,如果在“开始”→“程序”→“QtSDK”下找不到QtDesigner的快捷方式,可到QtSDK的安装路径下寻找QtDesigner应用程序,如:D:\QtSDK\Desktop\Qt\4.8.1\mingw\bin。(2)新建窗体对话框。通过“File”→“New”,来建立窗体对话框,如图13.5.13所示。图13.5.13新建窗体对话框第六十一页,共一百一十四页,编辑于2023年,星期二(3)示例设计:显示和隐藏“HelloQt!”该示例完成的功能是:设计两个按钮和一个Label,当点击“Show”按钮时,显示“HelloQt!”;当点击“Hide”按钮时,隐藏“HelloQt!”。①从左侧的窗口部件盒中拖出两个“PushButton”和一个“Label”,放在窗体上。如图13.5.14所示。

图13.5.14添加窗口部件第六十二页,共一百一十四页,编辑于2023年,星期二②修改窗口部件的属性。将两个按钮的名称分别改为“Show”和“Hide”,将Label名称改为“HelloQt!”,如图13.5.15所示。图13.5.15修改窗口部件属性第六十三页,共一百一十四页,编辑于2023年,星期二③单击菜单“Edit”→“EditSignals/Slots”,此时,当鼠标指向按钮或Label时,按钮或Label是红色。左键拖动“Show”到“HelloQt!”,如图13.5.16所示。释放鼠标,会弹出信号和槽的对话框,如图13.5.17所示。图13.5.16拖动“Show”到“HelloQt!”图13.5.17信号和槽对话框第六十四页,共一百一十四页,编辑于2023年,星期二④选择连接clicked()信号和show()槽。需要注意的是,首先必须选中“ShowsignalsandslotsinheritedfromQWidget”,然后在左侧选择信号clicked(),在右侧选择show(),如图13.5.18所示。单击“确定”按钮,则将“Show”按钮与“HelloQt!”连接起来。图13.5.18配置信号和槽第六十五页,共一百一十四页,编辑于2023年,星期二⑤同样的方法将“Hide”按钮的click()信号与“HelloQt!”的hide()连接起来,连接之后如图13.5.19所示。图13.5.19连接图第六十六页,共一百一十四页,编辑于2023年,星期二⑥编译运行,运行结果如图13.5.20和图13.5.21所示:需要注意的是,QtDesigner只是用来进行GUI设计,生成一个.ui文件,具体的运行还依赖于QtCreator。图13.5.20按“Show”按钮之后的现象图13.5.21按“Hide”按钮之后的现象第六十七页,共一百一十四页,编辑于2023年,星期二13.5.5QtAssistant

QtAssistant是Qt自带的一款可定制、可重新发行的帮助文件浏览器。QtAssistant是一个浏览Qt参考文档的工具,它具有强大的查询和索引功能,使用时比Web浏览器更加快速和容易。而且它可定制,并且可随用户自己的应用程序一起发布,从而形成用户自己的帮助系统。利用QtAssistant可以获取在线文档与帮助。Qt的参考文档包括HTML文档,描述了Qt的所有类和工具,以及Qt编程等。所以对于任何一名Qt开发人员来说,在线文档和帮助是必不可少的,它是一个基本工具。任何一本Qt书籍都不能完全覆盖到Qt中所有的类和函数,同时也无法提供全部的细节。尽可能了解Qt参考文档,对Qt开发人员来说是有益的。在Qt的doc/html目录下可以找到HTML格式的参考文档,并且可以使用任何一种Web浏览器来阅读它。第六十八页,共一百一十四页,编辑于2023年,星期二QtAssistant支持HTML文件,用户可以利用其定制自己的功能强大的帮助文档浏览器。定制过程中用到qhp,qch,qhcp,qhc四种不同格式的文件。这四种文件可以分为两组:(1)qhp与qchQhp(QtHelpProject)文件负责组织实际用到的帮助文件(通常为HTML文件,即需要在QtAssistant中浏览的文件),然后通过qhelpgenerator命令生成压缩的qch文件。Qch(QtCompressedHelp)文件是QtAssistant能够识别的文档最小单元,可以通过QtAssistant→编辑→首选项→文档标签页→添加/移除操作来注册或者注销一个qch文件。也可以通过命令“assistant-registerdoc.qch”来注册qch文件。注册后,即可在Assistant界面中浏览帮助文档。第六十九页,共一百一十四页,编辑于2023年,星期二(2)qhcp和qhcQhcp(QtHelpCollectionProject)的主要作用是将qch二进制文件组织成为一个collection,定制客户化的Assistant。而qhc则是通过qcollectiongenerator命令生成的二进制文件,启动Assistant时需要指定collection参数,即qhc文件。qhc文件中是qch文件的集合,打开Assistant时,通过指定当前collection即可注册多个帮助文档。第七十页,共一百一十四页,编辑于2023年,星期二13.5.6QtDemo1.QtDemo简介QtDemo是包含了大量的演示和示例程序,基本涵盖了Qt编程中的主要类别。在Windows下运行QtDemo,可以依次单击“开始”→“程序”→“QtSDK”→“QtDemo”。如果找不到,可在QtSDK的安装路径中寻找QtDemo的快捷方式,如“D:\QtSDK\Desktop\Qt\4.8.1\mingw\bin”。打开的QtDemo界面如图13.5.22所示。第七十一页,共一百一十四页,编辑于2023年,星期二从QtDemo的界面可见,左边列出了可供参考示例的类别,右边则是这个类别的概述,在左下角还有导航按钮,可以在各个不同页面间跳转。在界面的最下方左边的是“Quit”按钮,用于退出QtDemo。右边是“Togglefullscreen”按钮,用于切换全屏显示和正常显示。

图13.5.22QtDemo的界面第七十二页,共一百一十四页,编辑于2023年,星期二2.QtDemo的使用下面介绍如何使用QtDemo:第1步首先选择某一个大类例如选择“Dialogs”,方法是单击左侧的“Dialogs”按钮,QtDemo将跳转到该类别的页面,如图13.5.23所示:图13.5.23选择QtDemo的“Dialogs”类第七十三页,共一百一十四页,编辑于2023年,星期二第2步选择细分类别例如选择在左侧细分类别中的“ConfigurationDialog”,如图13.5.24所示:

图13.5.24选择“ConfigurationDialog”第七十四页,共一百一十四页,编辑于2023年,星期二第3步查看示例运行结果单击“Launch”按钮,QtDemo将运行示例程序,如图13.5.25所示:

图13.5.25示例运行结果第七十五页,共一百一十四页,编辑于2023年,星期二第4步查阅例子代码和参考文档该步骤实际上是和QtAssistant配合起来使用的,单击“Documentation”按钮,将调用QtAssistant并切换到相应的界面,如图13.5.26所示:图13.5.26查看例子代码和参考文档第七十六页,共一百一十四页,编辑于2023年,星期二第5步使用代码或文档接下来就是使用QtAssistant,进入某一个源代码文件中,可以浏览、复制源代码,或者稍作修改作为自己代码中的一部分。将QtDemo与QtAssistant结合起来使用,可以收到事半功倍的效果。第七十七页,共一百一十四页,编辑于2023年,星期二13.5.7Qt应用程序的开发示例在开发Qt应用程序时,一些常用的方法如下:①全部采用手写代码,在命令行下完成编译和运行。这种方式是最基础、最基本的,要求开发者充分了解编译系统和Qt有关知识。其缺点是在大型的、多人参与的工程开发和项目研制中,一些问题如协同开发、版本控制管理等都将变得难以解决。②在集成开发环境(IDE)中采用手写代码(包括设计界面),使用IDE完成编译和运行。这种方式借助IDE来管理工程要素,并且可以借助调试和图形化工具来加速开发。其缺点是IDE完成的一些事情往往会不如所愿,在很多情况下还是需要使用命令行工具来辅助。③使用QtDesigner设计界面,使用IDE完成编译和运行。开发者使用QtDesigner设计界面元素,然后把工程文件的生成、管理,程序的编译运行都交给IDE来处理。其缺点是使用QtDesigner生成的代码量较大,阅读代码和调试程序相对比较困难。集成式的工具可以为开发者做太多的事情,但也隐藏了Qt的核心机制与原理,对于初学者来说,不太容易理解和掌握Qt编程的本质。第七十八页,共一百一十四页,编辑于2023年,星期二下面以一个简单的“HelloQt!”程序为例,介绍采用两种不同方法的Qt应用程序开发流程。1.使用QtDesigner和IDE示例使用QtDesigner设计界面,使用IDE完成编译和运行。(1)启动QtCreator。依次单击“开始”→“程序”→“QtSDK”→“QtCreator”,启动QtCreator。(2)新建工程①文件→新建文件或工程,建立一个新工程,如图13.5.27所示:②如图13.5.28所示,在弹出的对话框里选择Qt控件项目,然后选择QtGUI应用。单击“选择”,进入下一步。③确定项目的名称以及存储路径,如图13.5.29所示。项目的名称和存储路径最好不要采用特殊字符和中文字符。这里,确定项目的名称为hello_qt,存储路径设为“E:\all_exercise\qt”。点击“下一步”按钮进入下一步。第七十九页,共一百一十四页,编辑于2023年,星期二图13.5.27新建项目第八十页,共一百一十四页,编辑于2023年,星期二图13.5.28QtGUI应用第八十一页,共一百一十四页,编辑于2023年,星期二图13.5.29设置项目名称和存储路径第八十二页,共一百一十四页,编辑于2023年,星期二图13.5.30目标设置第八十三页,共一百一十四页,编辑于2023年,星期二④如图13.5.30所示,对工程hello_qt的目标进行设置,选择默认设置即可。单击“下一步”按钮进入下一步。⑤指定源码文件的基本类信息,如图13.5.31所示,单击“下一步”按钮进入下一步。图13.5.31基本类信息第八十四页,共一百一十四页,编辑于2023年,星期二图13.5.32项目管理第八十五页,共一百一十四页,编辑于2023年,星期二⑥项目管理,主要向用户展示了即将创建的工程的信息,如图13.5.32所示,单击“完成”,就生成了一个新的项目hello_qt,如图13.5.33所示。此时,项目已经包含了头文件、源文件和界面文件。图13.5.33新工程界面第八十六页,共一百一十四页,编辑于2023年,星期二(2)创建窗口部件并设置属性①双击mainwindow.ui文件,QtCreator将把QtDesigner打开并集成到框架内,如图13.5.34所示。图13.5.34集成QtDesigner的QtCreator第八十七页,共一百一十四页,编辑于2023年,星期二②从左侧窗口部件中DisplayWidgets中找出并选中Label部件,将Label部件拖到设计窗口上,如图13.5.35所示。③设置Label的属性,双击TextLabel,将内容改为“HelloQt!”。此外,还可以通过右下角的属性栏改变其他属性,如字体、大小等。经设置后的界面如图13.5.36所示。(3)编译及运行hello_qt保存整个项目,单击左侧模式选择器中的“运行”按钮,运行过程中的截图如图13.5.37所示,运行的结果如图13.5.38所示。第八十八页,共一百一十四页,编辑于2023年,星期二图13.5.35选择Label部件第八十九页,共一百一十四页,编辑于2023年,星期二图13.5.36设置Label属性第九十页,共一百一十四页,编辑于2023年,星期二图13.5.37运行界面第九十一页,共一百一十四页,编辑于2023年,星期二图13.5.38运行结果第九十二页,共一百一十四页,编辑于2023年,星期二2.编写代码实现“HelloQt!”(1)新建工程这一步骤与第1小节中的新建工程类似,在此只给出每一个步骤的截图,如13.5.39~13.5.44所示。图13.5.39新建项目第九十三页,共一百一十四页,编辑于2023年,星期二图13.5.40空的Qt项目第九十四页,共一百一十四页,编辑于2023年,星期二图13.5.41设置项目名称和存储路径第九十五页,共一百一十四页,编辑于2023年,星期二图13.5.42目标设置第九十六页,共一百一十四页,编辑于2023年,星期二图13.5.43项目管理第九十七页,共一百一十四页,编辑于2023年,星期二图13.5.44新工程界面第九十八页,共一百一十四页,编辑于2023年,星期二(2)向新建的工程添加文件①右击helloqt工程文件夹,在弹出的菜单中选择“添加新文件”,具体如图13.5.45所示。图13.5.45helloqt添加新文件第九十九页,共一百一十四页,编辑于2023年,星期二②在新建文件的对话框中,选择C++源文件,如图13.5.46所示,单击“选择”进入下一步。图13.5.46新建C++源文件第一百页,共一百一十四页,编辑于2023年,星期二③确定新建C++源文件的名称及存储路径,如13.5.47所示,单击“下一步”按钮进入下一步。图13.5.47确定C++源文件的名称及存储路径第一百零一页,共一百一十四页,编辑于2023年,星期二④项目管理,汇集新建C++文件的相关信息,如图13.5.48所示,单击“完成”,实现向helloqt项目中添加C++源文件main.cpp。

图13.5.48项目管理第一百零二页,共一百一十四页,编辑于2023年,星期二(3)编辑代码在mian.cpp中编辑以下代码:1#include<QtGui>2intmain(intargc,char*argv[])3{4QApplicationapp(argc,argv);5QDialog*dd=newQDialog;6QLabel*label=newQLabel(dd);7label->setText("HelloQt!");89dd->show();10

温馨提示

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

评论

0/150

提交评论