第7章 嵌入式linux图形用户接口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. OpenGUI OpenGUI在Linux系统上已经存在很长时间了。这个库是用C++编写的,
只提供C++接口。OpenGUI基于一个用汇编语言实现的x86图形内 核,提供了一个高层的C/C++图形接口。OpenGUI提供了二维绘 图函数原型、消息驱动的API及BMP文件格式支持。OpenGUI功能 强大,使用方便,支持鼠标和键盘事件,在Linux上基于 FrameBuffer实现绘图。由于OpenGUI基于汇编实现内核并利用 MMX指令进行了优化,因此运行速度非常快,但是可移植性受到 了影响。
16
第三节 基于Qt技术的Qtopia 一、Qtopia简介 二、Qtopia的功能 三、Qtopia编程
17
第三节 基于Qt技术的Qtopia —— 一、Qtopia简介
Qtopia是由Trolltech公司基于Qt/Embedded库,专门针对采用嵌入 式Linux系统的消费电子设备所开发的一套应用程序包和开发库。 Qtopia平台是用于创建基于Linux设备的应用程序框架,并且包含 丰富的用户应用程序。Qtopia的设计利用了嵌入式Linux的高度优 化、高内存效率的各种功能,为众多的多应用程序设备提供主要的 通用功能。Qtopia软件分为4个主要层次
6
百度文库
第一节 嵌入式GUI简介 —— 二、嵌入式GUI的种类
3. MiniGUI MiniGUI是我国国内自主开发、比较成熟的一个图形用户界面系统,面
向基于Linux的实时嵌入式系统,使用现有成熟的图形引擎 (SV2GALib/LibGGI),采用类似WinCE的线程机制(目前 MiniGUILite版本改用微客户端/服务器模式来提供对多进程的支持), 集成了多字体和多字符集,支持硬件加速能力,充分利用显示内存。 MiniGUI利用线程之间的同步操作,实现了客户线程和服务线程之间的 微客户端/服务器结构,因为它的客户和服务器是同一进程的两个 不同线程。它的核心实现主要体现在消息队列数据结构的使用上。
11
第二节 嵌入式GUI —— Qt —— 三、Qt的执行过程 Qt的执行过程如图6-2所示。Qt应用程序初始化之后,在Qt库的支持下
响应相应的处理事件并且返回。
12
第二节 嵌入式GUI —— Qt —— 三、Qt的执行过程
该实现过程需要Qt最主要的三个基类:QObject类、QApplication类和 QWidget类。
15
第二节 嵌入式GUI —— Qt —— 六、QtDesigner介绍
Qt应用程序可以用Qt Desinger来编写。Qt Designer的功能十分强大, 并且提供了大量可供编程使用的组件,从而省略了许多重复性的工 作,可以减少程序的开发周期
Qt Designer可以新建工程,并且在工程文件中自动生成关于窗体文件 的.cpp、.h文件和main.cpp文件。其中,.cpp文件和.h文件也可以 通过uic工具生成。之后可以通过progen命令生成main.pro,通过 tmake工具生成makefile文件,再make即可得到相应的Qt应用程序。
7
第二节 嵌入式GUI —— Qt
一、Qt与Qt/Embedded简介 二、Qt的特点 三、Qt的执行过程 四、Qt的插槽机制 五、一个完整的Qt程序 六、QtDesigner介绍
8
第二节 嵌入式GUI —— Qt —— 一、Qt与Qt/Embedded简介
Qt是Trolltech公司的标志性产品,是一个跨平台的C++图形用户界面 (GUI)工具包。Qt的最大特点就是支持多平台处理,因为Qt对不 同平台的专门API进行了封装。
3
第一节 嵌入式GUI简介 —— 一、嵌入式GUI的特点
嵌入式系统一般不会建立在庞大的操作系统以及GUI之上,比如 Windows或X Window,它们对实时性的要求非常高,对GUI的要 求也更高。而且,嵌入式系统往往是一种定制设备,对GUI的需求
各不相同,有些系统只要求一些图形功能,而有些系统则要求完备 的GUI支持,因此,GUI也必须是可定制的。由于受到当前嵌入式 系统本身特点的影响,并受其发展限制,所以嵌入式系统中的GUI 应该有如下特点:
Qt /Embedded是在嵌入式环境下所使用的Qt,具有Qt 在桌面系统的所 有功能,是Trolltech公司为嵌入式设备上的图形用户界面和应用开 发而定制的工具开发包
9
第二节 嵌入式GUI —— Qt —— 二、Qt的特点
面向对象:Qt使用模块设计,并注重软件构件或元素的可重用性。 构件支持:Qt提供信号(signal)和插槽(slot)概念,这是一种类型安
1. QT/Embedded QT/Embedded是著名的QT库开发商TrollTech开发的基于FrameBuffer、
面向嵌入式系统的QT版本。它的主要特点是界面美观、色彩配比 好,使用与QT/Windows和QT/X11完全一致的API接口,许多基于 QT的程序可以非常方便地移植到嵌入式系统;同时它具有丰富的 模块,用户可以根据需要选择QT/Embedded的特性集合。 QT/Embedded实现了对下层输入设备的驱动和底层图形接口以及 各基类和API。 不过,QT/Embedded对于系统资源的要求非常高,运行时需要较大的存 储空间和运行空间;而且它是基于C++实现的,而这种C++接口对 于嵌入式系统中的某些应用来说显得比较臃肿。
10
第二节 嵌入式GUI —— Qt —— 二、Qt的特点
用户自定义:使用其他一些工具包时经常会遇到这样一种情况,没有真 正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子。 而在Qt中生成用户自定义的组件非常简单,而且易于修改组件的 行为。
国际化:Qt为本地化应用提供了完全的支持,所有用户界面文本都可以 基于消息翻译表被翻译成各国语言,Qt还支持双字节16位国际字 符标准。
丰富的API函数:Qt为专业应用提供了大量的函数,在Qt的API中含有大 约250个C++类,大多数类都是GUI专有的。
可用户化外观:Qt支持主题,基于Qt的应用程序能够在Windows外观、 Motif外观,以及其他一些用户化外观主题之间切换。
完整的一套组件工具:Qt编程的基本模块称之为组件,组件是用户界面 的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有 组件
QObject QObject类是所有能够处理信号、插槽和事件的Qt对象的基类,能够创
建带有父对象及其名字的对象,对象的父对象可以看作该对象的所 有者。
QApplication QApplication类负责GUI应用程序的控制流和主要设置。它包括主事件循
环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且
第7章 嵌入式linux图形用户接口
1
第7章 嵌入式linux图形用户接口
本章主要讲述嵌入式Linux图形用户界面(GUI,Graphic User Interface) 的有关内容,即嵌入式GUI。本章首先简单介绍嵌入式GUI的相关内容;之后 以Qt为例详细介绍其移植和编程操作;最后详细介绍基于QTE的Qtopia平台 的移植和编程操作。GUI编程能够提高操作的人性化,优化产品性能,减轻 用户认知负担,使程序更适合用户的操作需求。
QPushButton、QlistBox等都是它的子类。
13
第二节 嵌入式GUI —— Qt —— 四、Qt的插槽机制
在Qt程序中,事件处理采用了信号(signal)和插槽(slot)机制。信号 和插槽机制的好处是不需要调用翻译表,节省资源。利用信号和插 槽进行对象间的通信是Qt最主要的特征之一。 当对象状态发生改变的时候,发出signal通知所有的slot接收signal, 尽管它并不知道哪些函数定义了slot,而slot也不知道要接收怎样 的signal。signal和slot机制真正实现了封装的概念,但它们之间并 不是一一对应的。
•
占用的存储空间以及运行时占用资源少。
•
运行速度以及响应速度快。
•
可靠性高。
•
便于移植和定制。
4
第一节 嵌入式GUI简介 —— 二、嵌入式GUI的种类
目前,常用的嵌入式GUI系统有QT/Embedded、MicroWindows、 MiniGUI和OenGUI等。下面对这几种常用的系统做一下简单介绍。
显然,由右图可知,同一个信号可以 连接到多个插槽,多个信号也可以连 接到同一个插槽之中。随时可以建立 一个连接,或者取消一个连接。不过 取消一个连接不是很常用,因为当一 个对象被删除后,它所包含的连接都 会被自动取消。
14
第二节 嵌入式GUI —— Qt —— 五、一个完整的Qt程序
本节给出一个例子,首先产生一个Qapplication类的实例,然后定义窗 口实例并把它作为程序的主窗口,最后调用show()和exec()方法, 使自动界面作为主界面,程序进入消息循环。代码如下:
#include <qapplication.h> #include <qlabel.h> int main(int argc, char **argv) {
QApplication app (argc, argv); QLabel *hello = new QLabel("Hello Qt/Embedded!", 0); app.setMainWidget(hello); hello->show(); return app.exec(); }
全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的 情况下进行合作,这使得Qt适合于真正的构件编程。 友好的联机帮助:Qt提供了大量的联机参考文档,有超文本HTML方式, 也有Linix帮助手册页和补充说明。对于初学者,其中的指南将一 步步地介绍如何进行Qt编程。 便利性: Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同 窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统 上不同处理方式下的细节问题。
主要内容
第一节 嵌入式GUI简介 第二节 嵌入式GUI —— Qt 第三节 基于Qt技术的Qtopia
2
第一节 嵌入式GUI简介
内容: 随着嵌入式系统的广泛应用,PDA、机顶盒、DVD/VCD播放机及WAP
手机等嵌入式设备已经迅速普及,这些设备同时应该拥有华丽美 观、易于操作的图形用户界面。因此,在嵌入式系统中,特别是 在一些消费类产品中,也逐渐出现了图形用户界面(GUI) 一、嵌入式GUI的特点 二、嵌入式GUI的种类
18
第三节 基于Qt技术的Qtopia —— 二、Qtopia的功能
5
第一节 嵌入式GUI简介 —— 二、嵌入式GUI的种类
2. MicroWindows Microwindows是由美国CenturySoftware公司开发的开放源码的嵌入式
GUI项目。它不需要其他图形系统的支持,可以充分利用Linux提 供的Framebuffer机制来进行图形显示。同时在底层提供了对多种 芯片的支持,并基本上用C语言实现,因此移植性较强。 Microwindows支持两种API:ECMAAPIW(类Win32API)和NanoXAPIs。这些API对Win32和XWindow系统有很好的兼容性,使程 序可以很容易地从其他系统上移植过来。 由于MicroWindows为了与XWindow的兼容,采用了传统的基于 UNIXSocket的客户端/服务器结构。此是,客户端的画图、窗口建 立等操作都是通过套接字与服务器通信。在这种情况下,系统就非 常依赖于UNIXSocket,而UNIXSocket的传递需要通过内核,这在 一些对实时性要求比较高的系统里就不太有利。而 且,Microwindows基本上是用C语言实现的,虽然增强了可移植性, 但也导致了系统的运行效率不高。
处理应用程序的开始、结束以及会话管理,还包括系统和应用程序 方面的设置。
QWidget QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。
组件是用户界面的单元组成部分,它接收来自鼠标、键盘和其他窗 口系统的事件,并且绘制到屏幕上。QWidget类有很多成员函数,
但一般不直接使用,而是通过子类继承来使用其函数功能。例如,
只提供C++接口。OpenGUI基于一个用汇编语言实现的x86图形内 核,提供了一个高层的C/C++图形接口。OpenGUI提供了二维绘 图函数原型、消息驱动的API及BMP文件格式支持。OpenGUI功能 强大,使用方便,支持鼠标和键盘事件,在Linux上基于 FrameBuffer实现绘图。由于OpenGUI基于汇编实现内核并利用 MMX指令进行了优化,因此运行速度非常快,但是可移植性受到 了影响。
16
第三节 基于Qt技术的Qtopia 一、Qtopia简介 二、Qtopia的功能 三、Qtopia编程
17
第三节 基于Qt技术的Qtopia —— 一、Qtopia简介
Qtopia是由Trolltech公司基于Qt/Embedded库,专门针对采用嵌入 式Linux系统的消费电子设备所开发的一套应用程序包和开发库。 Qtopia平台是用于创建基于Linux设备的应用程序框架,并且包含 丰富的用户应用程序。Qtopia的设计利用了嵌入式Linux的高度优 化、高内存效率的各种功能,为众多的多应用程序设备提供主要的 通用功能。Qtopia软件分为4个主要层次
6
百度文库
第一节 嵌入式GUI简介 —— 二、嵌入式GUI的种类
3. MiniGUI MiniGUI是我国国内自主开发、比较成熟的一个图形用户界面系统,面
向基于Linux的实时嵌入式系统,使用现有成熟的图形引擎 (SV2GALib/LibGGI),采用类似WinCE的线程机制(目前 MiniGUILite版本改用微客户端/服务器模式来提供对多进程的支持), 集成了多字体和多字符集,支持硬件加速能力,充分利用显示内存。 MiniGUI利用线程之间的同步操作,实现了客户线程和服务线程之间的 微客户端/服务器结构,因为它的客户和服务器是同一进程的两个 不同线程。它的核心实现主要体现在消息队列数据结构的使用上。
11
第二节 嵌入式GUI —— Qt —— 三、Qt的执行过程 Qt的执行过程如图6-2所示。Qt应用程序初始化之后,在Qt库的支持下
响应相应的处理事件并且返回。
12
第二节 嵌入式GUI —— Qt —— 三、Qt的执行过程
该实现过程需要Qt最主要的三个基类:QObject类、QApplication类和 QWidget类。
15
第二节 嵌入式GUI —— Qt —— 六、QtDesigner介绍
Qt应用程序可以用Qt Desinger来编写。Qt Designer的功能十分强大, 并且提供了大量可供编程使用的组件,从而省略了许多重复性的工 作,可以减少程序的开发周期
Qt Designer可以新建工程,并且在工程文件中自动生成关于窗体文件 的.cpp、.h文件和main.cpp文件。其中,.cpp文件和.h文件也可以 通过uic工具生成。之后可以通过progen命令生成main.pro,通过 tmake工具生成makefile文件,再make即可得到相应的Qt应用程序。
7
第二节 嵌入式GUI —— Qt
一、Qt与Qt/Embedded简介 二、Qt的特点 三、Qt的执行过程 四、Qt的插槽机制 五、一个完整的Qt程序 六、QtDesigner介绍
8
第二节 嵌入式GUI —— Qt —— 一、Qt与Qt/Embedded简介
Qt是Trolltech公司的标志性产品,是一个跨平台的C++图形用户界面 (GUI)工具包。Qt的最大特点就是支持多平台处理,因为Qt对不 同平台的专门API进行了封装。
3
第一节 嵌入式GUI简介 —— 一、嵌入式GUI的特点
嵌入式系统一般不会建立在庞大的操作系统以及GUI之上,比如 Windows或X Window,它们对实时性的要求非常高,对GUI的要 求也更高。而且,嵌入式系统往往是一种定制设备,对GUI的需求
各不相同,有些系统只要求一些图形功能,而有些系统则要求完备 的GUI支持,因此,GUI也必须是可定制的。由于受到当前嵌入式 系统本身特点的影响,并受其发展限制,所以嵌入式系统中的GUI 应该有如下特点:
Qt /Embedded是在嵌入式环境下所使用的Qt,具有Qt 在桌面系统的所 有功能,是Trolltech公司为嵌入式设备上的图形用户界面和应用开 发而定制的工具开发包
9
第二节 嵌入式GUI —— Qt —— 二、Qt的特点
面向对象:Qt使用模块设计,并注重软件构件或元素的可重用性。 构件支持:Qt提供信号(signal)和插槽(slot)概念,这是一种类型安
1. QT/Embedded QT/Embedded是著名的QT库开发商TrollTech开发的基于FrameBuffer、
面向嵌入式系统的QT版本。它的主要特点是界面美观、色彩配比 好,使用与QT/Windows和QT/X11完全一致的API接口,许多基于 QT的程序可以非常方便地移植到嵌入式系统;同时它具有丰富的 模块,用户可以根据需要选择QT/Embedded的特性集合。 QT/Embedded实现了对下层输入设备的驱动和底层图形接口以及 各基类和API。 不过,QT/Embedded对于系统资源的要求非常高,运行时需要较大的存 储空间和运行空间;而且它是基于C++实现的,而这种C++接口对 于嵌入式系统中的某些应用来说显得比较臃肿。
10
第二节 嵌入式GUI —— Qt —— 二、Qt的特点
用户自定义:使用其他一些工具包时经常会遇到这样一种情况,没有真 正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子。 而在Qt中生成用户自定义的组件非常简单,而且易于修改组件的 行为。
国际化:Qt为本地化应用提供了完全的支持,所有用户界面文本都可以 基于消息翻译表被翻译成各国语言,Qt还支持双字节16位国际字 符标准。
丰富的API函数:Qt为专业应用提供了大量的函数,在Qt的API中含有大 约250个C++类,大多数类都是GUI专有的。
可用户化外观:Qt支持主题,基于Qt的应用程序能够在Windows外观、 Motif外观,以及其他一些用户化外观主题之间切换。
完整的一套组件工具:Qt编程的基本模块称之为组件,组件是用户界面 的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有 组件
QObject QObject类是所有能够处理信号、插槽和事件的Qt对象的基类,能够创
建带有父对象及其名字的对象,对象的父对象可以看作该对象的所 有者。
QApplication QApplication类负责GUI应用程序的控制流和主要设置。它包括主事件循
环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且
第7章 嵌入式linux图形用户接口
1
第7章 嵌入式linux图形用户接口
本章主要讲述嵌入式Linux图形用户界面(GUI,Graphic User Interface) 的有关内容,即嵌入式GUI。本章首先简单介绍嵌入式GUI的相关内容;之后 以Qt为例详细介绍其移植和编程操作;最后详细介绍基于QTE的Qtopia平台 的移植和编程操作。GUI编程能够提高操作的人性化,优化产品性能,减轻 用户认知负担,使程序更适合用户的操作需求。
QPushButton、QlistBox等都是它的子类。
13
第二节 嵌入式GUI —— Qt —— 四、Qt的插槽机制
在Qt程序中,事件处理采用了信号(signal)和插槽(slot)机制。信号 和插槽机制的好处是不需要调用翻译表,节省资源。利用信号和插 槽进行对象间的通信是Qt最主要的特征之一。 当对象状态发生改变的时候,发出signal通知所有的slot接收signal, 尽管它并不知道哪些函数定义了slot,而slot也不知道要接收怎样 的signal。signal和slot机制真正实现了封装的概念,但它们之间并 不是一一对应的。
•
占用的存储空间以及运行时占用资源少。
•
运行速度以及响应速度快。
•
可靠性高。
•
便于移植和定制。
4
第一节 嵌入式GUI简介 —— 二、嵌入式GUI的种类
目前,常用的嵌入式GUI系统有QT/Embedded、MicroWindows、 MiniGUI和OenGUI等。下面对这几种常用的系统做一下简单介绍。
显然,由右图可知,同一个信号可以 连接到多个插槽,多个信号也可以连 接到同一个插槽之中。随时可以建立 一个连接,或者取消一个连接。不过 取消一个连接不是很常用,因为当一 个对象被删除后,它所包含的连接都 会被自动取消。
14
第二节 嵌入式GUI —— Qt —— 五、一个完整的Qt程序
本节给出一个例子,首先产生一个Qapplication类的实例,然后定义窗 口实例并把它作为程序的主窗口,最后调用show()和exec()方法, 使自动界面作为主界面,程序进入消息循环。代码如下:
#include <qapplication.h> #include <qlabel.h> int main(int argc, char **argv) {
QApplication app (argc, argv); QLabel *hello = new QLabel("Hello Qt/Embedded!", 0); app.setMainWidget(hello); hello->show(); return app.exec(); }
全的方法,它允许回调,并支持对象之间在彼此不知道对方信息的 情况下进行合作,这使得Qt适合于真正的构件编程。 友好的联机帮助:Qt提供了大量的联机参考文档,有超文本HTML方式, 也有Linix帮助手册页和补充说明。对于初学者,其中的指南将一 步步地介绍如何进行Qt编程。 便利性: Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同 窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统 上不同处理方式下的细节问题。
主要内容
第一节 嵌入式GUI简介 第二节 嵌入式GUI —— Qt 第三节 基于Qt技术的Qtopia
2
第一节 嵌入式GUI简介
内容: 随着嵌入式系统的广泛应用,PDA、机顶盒、DVD/VCD播放机及WAP
手机等嵌入式设备已经迅速普及,这些设备同时应该拥有华丽美 观、易于操作的图形用户界面。因此,在嵌入式系统中,特别是 在一些消费类产品中,也逐渐出现了图形用户界面(GUI) 一、嵌入式GUI的特点 二、嵌入式GUI的种类
18
第三节 基于Qt技术的Qtopia —— 二、Qtopia的功能
5
第一节 嵌入式GUI简介 —— 二、嵌入式GUI的种类
2. MicroWindows Microwindows是由美国CenturySoftware公司开发的开放源码的嵌入式
GUI项目。它不需要其他图形系统的支持,可以充分利用Linux提 供的Framebuffer机制来进行图形显示。同时在底层提供了对多种 芯片的支持,并基本上用C语言实现,因此移植性较强。 Microwindows支持两种API:ECMAAPIW(类Win32API)和NanoXAPIs。这些API对Win32和XWindow系统有很好的兼容性,使程 序可以很容易地从其他系统上移植过来。 由于MicroWindows为了与XWindow的兼容,采用了传统的基于 UNIXSocket的客户端/服务器结构。此是,客户端的画图、窗口建 立等操作都是通过套接字与服务器通信。在这种情况下,系统就非 常依赖于UNIXSocket,而UNIXSocket的传递需要通过内核,这在 一些对实时性要求比较高的系统里就不太有利。而 且,Microwindows基本上是用C语言实现的,虽然增强了可移植性, 但也导致了系统的运行效率不高。
处理应用程序的开始、结束以及会话管理,还包括系统和应用程序 方面的设置。
QWidget QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。
组件是用户界面的单元组成部分,它接收来自鼠标、键盘和其他窗 口系统的事件,并且绘制到屏幕上。QWidget类有很多成员函数,
但一般不直接使用,而是通过子类继承来使用其函数功能。例如,