版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重点内容:嵌入式GUI组成QT/Embedded关键技术信号与插槽机制QT/Embedded程序设计第十一章嵌入式Linux图形设计图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户介面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。在嵌入式系统中,GUI的地位也越来越重要,但是不同于桌面机系统,嵌入式GUI要求简单、直观、可靠、占用资源小且反应快速,以适应系统硬件资源有限的条件。另外,由于嵌入式系统硬件本身的特殊性,嵌入式GUI应具备高度可移植性与可裁减性,以适应不同的硬件条件和使用需求。总体来讲,嵌入式GUI具备以下特点:●体积小;● 运行时耗用系统资源小;● 上层接口与硬件无关,高度可移植;● 高可靠性;● 在某些应用场合应具备实时性。一、嵌入式GUI组成嵌入式GUI组成和PC机上一般的应用程序的GUI相差不大,其主要由桌面、视窗、单一文件界面或者多文件界面、标签、菜单、功能表、图标等组成。具体各个组成部分的说明如下:1、桌面(Desktop)桌面是在启动时显示,也是界面中最底层,有时也指代包括窗口、文件浏览器在内的“桌面环境”。在桌面上由于可以重叠显示窗口,因此可以实现多任务化。一般的界面中,桌面上放有各种应用程序和数据的图标,用户可以依此开始工作。一、嵌入式GUI组成
2、视窗(Window)应用程序为使用数据而在图形用户界面中设置的基本单元。应用程序和数据在窗口内实现一体化。在窗口中,用户可以在窗口中操作应用程序,进行数据的管理、生成和编辑。通常在窗口四周设有菜单、图标,数据放在中央。在窗口中,根据各种数据和应用程序的内容设有标题栏,一般放在窗口的最上方,并在其中设有最大化、最小化(隐藏窗口,并非消除数据)、前进后退、缩进(仅显示标题栏)等动作按钮,可以简单地对窗口进行操作。一、嵌入式GUI组成3、单一文件界面(SingleDocumentInterface)单一文件界面即一个窗口内只负责管理一份数据。一份数据对应着一个现实窗口。在这种情况下,数据和显示窗口的数量是一样的。若要在其他应用程序的窗口使用数据,将相应生成新的窗口。因此窗口数量多,管理复杂。4、多文件界面(MultipleDocumentInterface)多文件界面即在一个窗口之内进行多份数据管理的方式。这种情况下,窗口的管理简单化,但操作变为双重管理。多文件界面主要是微软视窗系统采用。一、嵌入式GUI组成5、标签(Label)多文件界面的数据管理方式中使用的一种界面,将数据的标题在窗口中并排,通过选择标签标题显示必要的数据,这样使得接入数据方式变得更为便捷。6、菜单(Menu)将系统可以执行的命令以阶层的方式显示出来的一个界面。重要程度一般是从左到右,越往右重要度越低。一般重视文件的操作、编辑功能,因此放在最左边,然后往右有各种设置等操作,最右边往往设有帮助。一般使用鼠标的第一按钮进行操作。一、嵌入式GUI组成7、即时菜单,又称功能表(RealTimeMenu)在菜单栏以外地方,通过鼠标的第二按钮调出的菜单称为“即时菜单”。根据调出位置的不同,菜单内容即时变化,列出所指示的对象目前可以进行的操作。8、图标(Icon)图标是显示在管理数据的应用程序中的数据,或者显示应用程序本身。数据管理程序,即在文件夹中用户数据的管理、进行特定数据管理的程序的情况下,数据通过图标显示出来。通常情况下显示的是数据的内容或者与数据相关联的应用程序的图案。一、嵌入式GUI组成9、按钮(Button)按钮通常是在菜单中,利用程度高的命令用图形表示出来,配置在应用程序中。应用程序中的按钮,通常可以代替菜单。一些使用程度高的命令,不必通过菜单一层层翻动才能调出,极大提高了工作效率。但是,各种用户使用的命令频率是不一样的,因此这种配置一般都是可以由用户自定义编辑。一、嵌入式GUI组成目前主流的一些GUI:●Qt/Embedded●MiniGUI●MicroWindows●OpenGUI●Tiny-x二、QT/Embedded关键技术
1.Qt/Embedded简介 2.Qt/Embedded架构 3.Qt的开发环境 4.Qt的支撑工具及组件 5.Qt/Embedded对象模型 6.Qt/Embedded常用的类1.Qt/Embedded简介
Qt是Trolltech公司的一款图形开发产品,它采用完全的面向对象技术来进行图形应用程序的设计,给程序开发者建立艺术级的图形用户界面提供所需的全部功能,并且允许真正的组件编程。Trolltech公司是挪威的一家公司,该公司在1994年成立,但是在公司成立之前的两年就开始进行Qt的设计,并且在1995年推出第一个商业版本。自从1996年早些时候,Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE的基础,KDE是所有主要的Linux发行版的一个标准组件。二、QT/Embedded关键技术2.Qt/Embedded架构Qt/Embedded通过QtAPI与LinuxI/O设施直接交互,成为嵌入式Linux端口。同Qt/X11相比,Qt/Embedded很省内存,因为它不需要一个X服务器或是Xlib库,它在底层摒弃了Xlib,采用FrameBuffer(帧缓冲)作为底层图形接口。同时,将外部输入设备抽象为键盘和鼠标输入事件。Qt/Embedde的应用程序可以直接写内核缓冲帧,这避免开发者使用繁琐的Xlib/Server系统。二、QT/Embedded关键技术2.Qt/Embedded架构
下面左图比较了Qt/Embedded与Qt/X11的架构对应关系,其中可以看出Qt/Embedded在架构中完成了Qt/X11、Qt/Xlib和XWindowSever的功能。右图为Qt/Embedded架构。二、QT/Embedded关键技术3.Qt的开发环境Qt/Embedded的开发环境可以取代那些我们熟知的UNIX和Windows开发工具。它提供了几个跨平台的工具使得开发变得迅速和方便,尤其是它的图形设计器。UNIX下的开发者可以在PC机或者工作站使用虚拟缓冲帧,从而可以模仿一个和嵌入式设备的显示终端大小,像素相同的显示环境。二、QT/Embedded关键技术3.Qt的开发环境如果Qt/Embedded的应用是在UNIX平台下开发的话,那么它就可以在开发的机器上以一个独立的控制台或者虚拟缓冲帧的方式来运行,对于后者来说,其实是有一个X11的应用程序虚拟了一个缓冲帧。通过指定显示设备的宽度,高度和颜色深度,虚拟出来的缓冲帧将和物理的显示设备在每个像素上保持一致。这样每次调试应用时开发人员就不用总是刷新嵌入式设备的FLASH存储空间,从而加速了应用的编译、链接和运行周期。运行Qt的虚拟缓冲帧工具的方法是在Linux的图形模式下运行以下命令“qvfb”将打开虚拟缓冲帧工具。二、QT/Embedded关键技术4.Qt的支撑工具及组件Qt包含了许多支持嵌入式系统开发的工具,有两个最实用的工具是Qmake和Qtdesigner(图形设计器)。二、QT/Embedded关键技术Qmake是一个为编译Qt/Embedded库和应用而提供的Makefile生成器。它能够根据一个工程文件(.pro)产生不同平台下的Makefile文件。Qmake支持跨平台开发和影子生成(影子生成是指当工程的源代码共享给网络上的多台机器时,每台机器编译链接这个工程的代码将在不同的子路径下完成,这样就不会覆盖别人的编译链接生成的文件。Qmake还易于在不同的配置之间切换)。4.Qt的支撑工具及组件Qtdesigner图形设计器可以使开发者可视化地设计对话框而不需编写代码。使用Qt图形设计器的布局管理可以生成能平滑改变尺寸的对话框。Qmake和Qtdesigner图形设计器是完全集成在一起的。二、QT/Embedded关键技术4.Qt的支撑工具及组件Qt/Embedded以软件包的形式提供组件,主要有4个软件包:tmake工具安装包,Qt/Embedded安装包,Qt的X11版的安装包和Qt/Embedded安装包。●tmake工具包提供了生成Makefile的能力;●Qt/Embedded工具包中包含了绝大部分的类定义及其实现文件;二、QT/Embedded关键技术4.Qt的支撑工具及组件●Qt的X11工具包提供了图形设计器和帧缓冲管理等多个实用软件;●Qt/Embedded工具包提供了一种可定制的开发环境和用户界面,从本质上说,它之于Linux犹如UIQ和Series60之于Symbian。二、QT/Embedded关键技术5.Qt/Embedded对象模型Qt中的元对象系统是用来处理对象间通讯的信号/槽机制、运行时的类型信息和动态属性系统。它基于下列三类:● QObject类;● 类声明中的私有段中的Q_OBJECT宏;● 元对象编译器(moc)。二、QT/Embedded关键技术5.Qt/Embedded对象模型除了提供对象间通讯的信号和槽机制之外,QObject中的元对象代码实现其它特征:● className()函数在运行的时候以字符串返回类的名称,不需要C++编译器中的本地运行类型信息(RTTI)的支持;● inherits()函数返回这个对象是否是一个继承于QObject继承树中一个特定类的类的实例;二、QT/Embedded关键技术5.Qt/Embedded对象模型● tr()和trUtf8()两个函数是用于国际化中的字符串翻译;● setProperty()和property()两个函数是用来通过名称动态设置和获得对象属性的;● metaObject()函数返回这个类所关联的元对象。二、QT/Embedded关键技术6.Qt/Embedded常用的类 1)窗体类
2)QWidget类
3)QApplication类二、QT/Embedded关键技术6.Qt/Embedded常用的类1)窗体类二、QT/Embedded关键技术Qt拥有丰富的满足不同需求的窗体(按钮,滚动条等等),Qt的窗体使用起来很灵活,为了满足特别的要求,它很容易就可以被子类化。窗体是Qwidget类或它子类的实例,客户自己的窗体类需要从Qwidget它的子类继承。下图所示的是窗体类的层次图。6.Qt/Embedded常用的类1)窗体类二、QT/Embedded关键技术一个窗体可以包含任意数量的子窗体,子窗体可以显示在父窗体的客户区,一个没有父窗体的窗体我们称之为顶级窗体,一个窗体通常有一个边框和标题栏作为装饰。Qt并未对一个窗体有什么限制,任何类型的窗体可以是顶级窗体,任何类型的窗体可以是别的窗体的子窗体。6.Qt/Embedded常用的类2)QWidget类二、QT/Embedded关键技术
QWidget类是所有用户界面对象的基类。窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。下面是一个典型的应用程序设计://#include<qwidget.h>classQ_EXPORTQWidget:publicQObject,publicQPaintDevice{……}6.Qt/Embedded常用的类3)QApplication类二、QT/Embedded关键技术QApplication类管理图形用户界面应用程序的控制流和主要设置。它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。对于任何一个使用Qt的图形用户界面应用程序,都正好存在一个QApplication对象,而不论这个应用程序在同一时间内是不是有0、1、2或更多个窗口。 1.信号的定义 2.插槽定义 3.信号和插槽连接 4.信号发射三、信号与插槽机制1.信号的定义当对象的内部状态发生改变,信号就被发射,在某些方面对于对象代理或者所有者也许是很有趣的。只有定义了一个信号的类和它的子类才能发射这个信号。
class类名
{ …… signal: //信号定义
…… }信号会由moc自动生成并且一定不要在.cpp文件中实现。它们也不能有任何返回类型(比如void)。三、信号与插槽机制2.插槽定义定义槽时使用关键字slots,并且槽具有公有、保护和私有三种属性。当一个和槽连接的信号被发射的时候,这个槽被调用。槽也是普通的C++函数并且可以像它们一样被调用,唯一的区别就是槽可以被信号连接。class类名
{ …… publicslots: //公有插槽定义
protectedslots: //保护插槽定义
privateslots: //私有插槽定义
…… }三、信号与插槽机制2.插槽定义三、信号与插槽机制一个槽的访问权限决定了谁可以和它相连:
●publicslots:包含任何信号都可以相连的槽。
●protectedslots:包含了此类和它的子类的信
号才能连接的槽。
●privateslots:包含了此类本身的信号可以连
接的槽。3.信号和插槽连接三、信号与插槽机制从上面的定义可以看出,信号和插槽都是某一对象的成员,通常情况下一个信号可以和一个或多个插槽相关联,关联函数如下: connect(对象1,对象1信号,对象2,插槽)4.信号发射三、信号与插槽机制在Qt中,发射信号使用emit来完成。下面就举例说明如何在一个类中添加自己的信号和插槽。
classFoo:publicQObject{
Q_OBJECTpublic:Foo();intvalue()const{returnval;}publicslots:voidsetValue(int);signals:voidvalueChanged(int);private:intval;};4.信号发射三、信号与插槽机制voidFoo::setValue(intv){if(v!=val){
val=v;
emitvalueChanged(v);}}voidmain(){
Fooa,b;connect(&a,SIGNAL(valueChanged(int)),&b,
SLOT(setValue(int)));b.setValue(11);//a=undefinedb=11a.setValue(79);//a=79b=79b.value(); ……}4.信号发射三、信号与插槽机制解释:在类中定义信号使用关键字signal,在Foo类中定义了信号valueChanged(int),通过发射该信号告诉外面的世界它的状态发生了变化在上例中定义了一个公有槽,其它对象(或自身)可以发送信号给这个槽。在槽函数setValue()中,首先判断是否要修改val成员的值,如果是,则修改val成员的值,然后调用emit来发送valueChanged(v)信号,告诉其它对象,该对象的val成员的值已经发生改变。4.信号发射三、信号与插槽机制解释:调用a.setValue(79)会使a发射一个valueChanged()信号,b将会在它的setValue()槽中接收这个信号,也就是b.setValue(79)被调用。接下来b会发射同样的valueChanged()信号,但是因为没有槽被连接到b的valueChanged()信号,所以信号消失。四、QT/Embedded程序设计Qt/Embedded安装Qt设计实例--密码验证程序1.Qt/Embedded安装四、QT/Embedded程序设计
这里使用的安装版本是Qt/Embedded4.3.3。源码可以从网站上下载。具体地址为:/qt/source/qt-all-opensource-src-4.3.3.tar.gz。
解压之后就可以开始安装了。我们可以新建一个目录用来编译,比如“build”目录。具体命令如下:$tarxvfqt-all-opensource-src-4.3.3.tar.gz$mkdirbuild$cdbuild1.Qt/Embedded安装四、QT/Embedded程序设计具体过程为:1)配置2)编译3)测试1.Qt/Embedded安装四、QT/Embedded程序设计1)配置进入build目录,开始配置安装文件。在命令行中输入以下命令:$cdbuild$../qt-all-opensource-src-4.3.3/configure-release-no-qvfb-xplatformqws/linux-arm-g++-embeddedarm-no-stl-plugin-sql-sqlite-no-qt3support-no-nis-no-cups-no-iconv-no-qdbus-no-freetype-depths4,8,16,32-qt-mouse-linuxtp配置过程中有一些确认选项,确认之后,我们就可以使用“gmake”命令编译安装了。1.Qt/Embedded安装四、QT/Embedded程序设计2)编译在命令行中输入gmake命令安装:
$gmake #gmakeinstallqt-all-opensource-src-4.3.3将被安装到/usr/local/Trolltech/qt- all-opensource-src-4.3.31.Qt/Embedded安装四、QT/Embedded程序设计3)测试
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学生活规划与准备
- 青岛理工大学《环境化学实验》2023-2024学年第一学期期末试卷
- 青岛酒店管理职业技术学院《数字电路》2023-2024学年第一学期期末试卷
- 医学实验室检验技术全解
- 小班行走课程设计
- 健康饮食与营养均衡指导
- 城市治理与公共服务创新研究
- 思政课课程设计特色范文
- 宿舍管理系统java课程设计
- 旅游行业人力资源开发与培训汇报
- 儿童绘画心理学测试题
- 耐火窗施工方案
- 兽药经营质量管理文件
- 反无人飞机技术方案
- 国家中小学智慧教育平台应用案例
- 物业管理所需设备及耗材
- 《NBA介绍英文》课件
- 市场营销基础(中职市场营销专业)全套教学课件
- 云计算与智能交通
- 人际沟通.从心开始(大学生人际交往)
- 复合桥面水泥混凝土铺装现场质量检验报告单
评论
0/150
提交评论