第8章 嵌入式图形界面设计_第1页
第8章 嵌入式图形界面设计_第2页
第8章 嵌入式图形界面设计_第3页
第8章 嵌入式图形界面设计_第4页
第8章 嵌入式图形界面设计_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

第8章嵌入式图形界面设计 2020 4 8 嵌入式图形系统简介Qt编程 教学要点 1嵌入式图形系统简介 Linux本身没有图形界面 Linux现在的图形界面的实现只是Linux下的应用程序实现的 图形界面并不是Linux的一部分 Linux只是一个基于命令行的操作系统Linux和Xfree的关系就相当于当年的DOS和Windows3 0一样 Windows3 0不是独立的操作系统 它只是DOS的扩充 是DOS下的应用程序级别的系统 不是独立的操作系统 同样Xfree只是Linux下的一个应用程序而已 不是系统的一部分 X的存在可以方便用户使用电脑 Win95及以后的版本就不一样了 图形界面是操作系统的一部分 图形界面在系统内核中就实现了 没有了图形界面 Windows就不成为Windows了 但Linux却不一样 没有图形界面 Linux还是Linux 很多装Linux的Web服务器就根本不装X服务器 这也是Windows和Linux的重要区别之一 XWindow 业界标准OpenLook 来自SUN与AT TMotif 来自IBM HP的OSFCDE UNIX的标准图形界面Qt KDE的开发基础GNOME 信仰的产物 1 2嵌入式图形系统的发展史 早期嵌入式系统功能简单 对图形用户界面需求并不是太大 而且当时的图形系统对硬件要求太高 在嵌入式上实现几乎没有可能 后来 应市场需求产生一些高级GUI工具包 使得嵌入式Linux下的图形开发成为可能 而且易于编写出更好 更漂亮的界面 1 3常用的几种嵌入式GUI工具包 紧缩的XWindow系统MicroWindowsOpenGUIQt EmbeddedMiniGUI TinyX TinyX 是标准X Windows在嵌入式系统的小巧实现 作为一个图形环境 X Windows是成功的 但由于在体系接口上的原因 限制了它对游戏 多媒体的支持能力 MicroWindows MicroWindows是嵌入式系统中广为使用的一种图形用户接口 其官方网站是 http www microwindows org 这个项目的早期目标是在嵌入式Linux平台上提供和普通个人电脑上类似的图形用户界面 MicroWindows 其主要特色在于提供了C S体系结构 同时也提供了相对完善的图形功能 但却无任何硬件加速能力 图形引擎中也存在着许多未经优化的低效算法 MicroWindows MicroWindows的核心基于显示设备接口 因此可移植性很好 MicroWindows有自己的Framebuffer 它并不局限于Linux开发平台 在eCos FreeBSD RTEMS等操作系统上都能很好地运行 此外 MicroWindows能在宿主机上仿真目标机 这意味着基于Linux的MicroWindows应用程序的开发和调试可以在普通的个人电脑上进行 而不需要使用普通嵌入式软件的 宿主机 目标机 调试模式 从而大大加快了开发速度 MicroWindows是完全免费的一个用户图形系统 OpenGUI OpenGUI基于一个用汇编实现的x86图形内核 提供了一个高层的C C 图形 窗口接口 它的资源消耗小 可移植性差 不支持多进程 Qt E Qt Embedded 简称Qt E 是一个跨平台的C 图形用户界面库 由挪威Trolltech公司出品 包括Qt 基于Framebuffer的QtopiaCore 快速开发工具QtDesigner 国际化工具QtLinguist等 Qt支持所有的UNIX系统 也包括Linux系统 还支持WinNT Win2k Windows95 98等平台 Qt E就是Qt的嵌入式版本 Qt E特点 跨平台MS Windows95 Windows98 WindowsNT4 0 Windows2000 WindowsXP Unix X11Linux SunSolaris HP UX CompaqTrue64Unix IBMAIX SGIIRIX和很多其它X11平台 MacintoshMacOSX 嵌入式的 包含有Framebuffer的Linux平台资源丰富Trolltech主页 ftp 新闻组服务器 非官方的Qt文档中文翻译小组 Qt E特点 工具丰富提供了构建 qmake 可视化设计 uic和qdesigner 国际化 linguist 文档系统 assistant 等一系列非常好用的工具 尤其是文档系统 绝对可以称得上是出色 丰富的API函数Qt E也可以看成是一组用于访问嵌入式设备的QtC API Qt E的Qt X11 Qt Windows和Qt Mac版本提供的都是相同的API和工具 运行需要资源少 功能强大相对X窗口下的嵌入解决方案而言 Qt E只要求一个较小的存储空间 Flash 和内存 Qt E可以运行在不同的处理器上部署的Linux系统 只要这个系统有一个线性地址的缓冲帧并支持C 的编译器 功能可裁减Qt E提供了大约200个可配置的特征 Qt E特点 Qt被Nokia收购 2008年1月28日 诺基亚收购Trolltech公司 Qt官方网站改为 2009年10月14日 诺基亚首次发布了Qt4 6和QtCreator1 3beta版 前者为最新版本的跨平台应用程序和UI框架 适用于桌面 嵌入式和移动应用程序与服务开发 而后者为最新版本的跨平台Qt集成开发环境 增加了对Symbian的支持 现二者均可通过以下网址下载获得 Qtopia是基于Qt编写的一个用于手持设备的用户信息管理软件 它集成了很多实用的程序 MiniGUI MiniGUI是由北京飞漫软件技术有限公司主持的一个自由软件项目 遵循GPL条款 其目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统 MiniGUI为应用程序定义了一组轻量级的窗口和图形设备接口 利用这些接口 每个应用程序可以建立多个窗口 而且可以在这些窗口中绘制图形 用户也可以利用MiniGUI建立菜单 按钮 列表框等常见的GUI元素 GPL GPL GeneralPublicLicense 同其它的自由软件许可证一样 许可社会公众享有 运行 复制软件的自由 发行传播软件的自由 获得软件源码的自由 改进软件并将自己做出的改进版本向社会发行传播的自由 GPL还规定 只要这种修改文本在整体上或其某个部分来源于遵循GPL的程序 该修改文本的整体就必须按照GPL流通 不仅该修改文本的源码必须向社会公开 且对于这种修改文本的流通不准许附加修改者自己作出的限制 因此 一项遵循GPL流通的程序不能同非自由的软件合并 GPL所表达的这种流通规则称为copyleft 表示与copyright 版权 的概念 相左 GPL协议最主要的几个原则 确保软件自始至终都以开放源代码形式发布 保护开发成果不被窃取用作商业发售 GPL是左侧版权 Copyleft 反版权 的体现 可以去掉所有原作的版权信息 只要保持开源 且随源代码 二进制版附上GPL的许可证 无论软件以何种形式发布 都必须同时附上源代码 开发或维护遵循GPL协议开发的软件的公司或个人 可以对使用者收取一定的服务费用 MiniGUI 用户可以将MiniGUI配置成 MiniGUI Threads 或者 MiniGUI Lite 运行在MiniGUI Threads上的程序可以在不同的线程中建立多个窗口 但所有的窗口在一个进程中运行 相反 运行在MiniGUI Lite上的每个程序是单独的进程 每个进程也可以建立多个窗口 面向嵌入式系统和实时系统的GUI主要应用于Linux控制台遵循MPL条款小巧 可配置 高性能 高可靠性MPL theMozillaPublicLicense 是1998年初Netscape的Mozilla小组为其开源软件项目设计的软件许可证 MPL许可证出现的最重要原因是 Netscape公司认为GPL许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益 MPL许可证第三条第7款中 允许被许可人将经过MPL许可证获得的源代码同自己其他类型的代码混合得到自己的软件程序 MiniGUI 2Qt编程 Qt是Trolltech公司的标志性产品 是一个跨平台的C 图形用户界面 GUI 工具包Qt应用程序接口与工具兼容于所有支持平台 让开发员们掌握一个应用程序接口 便可执行与平台非相关的应用开发与配置Qt Windows WindowsXP 2000 NT4 Me 98 Qt Mac MacOSX Qt X11 Linux Solaris HP UX IRIX AIX等 Qt对不同平台的专门API进行了专门的封装 文件处理 网络等 Qt特征 引入一种用于无缝对象通讯的被称为信号和槽的非常强大的机制可查询和可设计的属性强大的事件和事件过滤器根据上下文进行国际化的字符串翻译完善的时间间隔驱动的计时器使得在一个事件驱动的图形界面程序中很好地集成许多任务成为可能以一种自然的方式组织对象所有权的分层次和可查询的对象树被守护的指针 QGuardedPtr 当参考对象被破坏时 可以自动地设置为无效 不像正常的C 指针在它们的对象被破坏的时候变成了 摇摆指针 2 1Qt编程核心技术 Qt对象模型元对象系统信号和插槽属性QObject类对象树事件处理 元对象系统 是一个C 扩展 使得Qt更适合真正的组件GUI编程使用元编译器moc产生能被标准C 编译器访问的附加C 代码带有moc预编译器的C 基本上提供了面向对象的C的灵活性或类似于Java的运行环境 并保持了C 的执行效率和扩展性实现功能对象间通信的信号 插槽机制运行时的类型信息动态属性系统 信号和插槽 在Qt程序中 利用信号 signal 和插槽 slot 机制进行对象间的通信事件处理的方式也是回调当对象状态发生改变的时候 发出signal通知所有的slot接收signal 尽管它并不知道哪些函数定义了slot 而slot也同样不知道要接收怎样的signalsignal和slot机制真正实现了封装的概念 slot除了接收signal之外和其它的成员函数没有什么不同 而且signal和slot之间也不是一一对应的 Signal和Slot的声明 1 2 在Qt程序设计中 凡是包含signal和slot的类中都要加上Q OBJECT的定义classStudent publicQObject Q OBJECTpublic Student myMark 0 intmark const returnmyMark publicslots voidsetMark intnewMark signals voidmarkChanged intnewMark private intmyMark Signal和Slot的声明 2 2 signal的发出一般在事件的处理函数中 利用emit发出signal 在下面的例子中在在事件处理结束后发出signalvoidStudent setMark intnewMark if newMark myMark myMark newMark emitmarkChanged myMark Signal和Slot的连接 1 2 在signal和slot声明以后 需要使用connect 函数将它们连接起来 connect 函数属于QObject类的成员函数 它能够连接signal和slot 也可以用来连接signal和signal 函数如下 boolQObject connect constQObject sender constchar signal constQObject receiver constchar member static 其中第一个和第三个参数分别指出signal和slot是属于那个对象或组件 Signal和Slot的连接 2 2 在使用connect 函数进行连接的时候 还需要用到SIGNAL 和SLOT 这两个宏 使用方法如下 QLabel label newQLabel QScrollBar scroll newQScrollBar QObject connect scroll SIGNAL valueChanged int label SLOT setNum int Signal和Slot的连接方式 取消Signal和Slot连接 取消一个连接disconnect lcd SIGNAL overflow this SLOT handleMathError 取消一个连接不是很常用 因为Qt会在一个对象被删除后 自动取消这个对象所包含的所有的连接 属性 属性也是一个类的成员在类声明中用宏Q PROPERTY来声明只能在继承于QObject的子类中声明设置和得到属性的成员函数如下 QObject setProperty QMetaObject propertyNames QMetaObject property QObject类 QObject是Qt类体系的唯一基类 是Qt各种功能的源头 就象MFC中的CObject和Delphi中的TObject connect 提供信号槽机制对象树 QObject在对象树中组织它们自己 当以另外一个对象作为父对象来创建一个QObject时 它就被添加到父对象的children 列表中 并且当父对象被删除的时候 它也会被删除 这种机制很好的适合了图形用户界面应用对象的需要 事件 事件是由窗口系统或Qt本身对各种事务的反应而产生的 当用户按下 释放一个键或鼠标按钮 一个键盘或鼠标事件被产生 当窗口第一次显示 一个绘图事件产生 从而告知最新的可见窗口需要重绘自身 大多数事件是由于响应用户的动作而产生的 但还有一些 比如定时器等 是由系统独立产生的 事件运行机制 事件循环 QApplication QApplication和QWidget都是QObject类的子类 QApplication类负责GUI应用程序的控制流和主要的设置 它包括主事件循环体 负责处理和调度所有来自窗口系统和其他资源的事件 并且处理应用程序的开始 结束以及会话管理 还包括系统和应用程序方面的设置 对于一个应用程序来说 建立此类的对象是必不可少的 QWidget QWidget类是所有用户接口对象的基类 它继承了QObject类的属性 组件是用户界面的单元组成部分 它接收鼠标 键盘和其它从窗口系统来的事件 并把它自己绘制在盘屏幕上 QWidget类有很多成员函数 但一般不直接使用 而是通过子类继承来使用其函数功能 如 QPushButton QlistBox等都是它的子类 一个完整的Qt程序 1 include2 include3intmain intargc char argv 4 5QApplicationapp argc argv 6QLabel label newQLabel HelloQt 7label show 8returnapp exec 9 2 2QtDesigner 直接使用代码来直接编写GUI无疑是非常痛苦的 好在Qt提供了界面开发工具 QtDesigner Qt应用程序除了使用手工编写代码的方式外 还可以用过QtDesigner来完成 QtDesigner的功能十分强大 界面类似于VB 而且还提供了大量可供编程使用的组件 基于QtDesigner程序设计 1 4 在使用QtDesigner程序开发时 一般要涉及到下面几个步骤 1 创建和初始化子部件2 设置子部件布局3 设置Tab键次序 不是必须 4 建立信号与插槽的连接5 编写事件处理函数 1 创建并布置部件 2 对部件使用布局管理 3 建立信号与插槽的连接 基于QtDesigner程序设计 2 4 基于QtDesigner程序设计 3 4 编辑两个部件之间信号与插槽之间的连接方式 基于QtDesigner程序设计 4 4 QtDesigner下不同风格的预览 QtDesigner工作过程 QtDesigner将工程文件组织成 ui的文件由 ui文件生成 h文件 ui xmlUIC oform hform ui需要注意的是 在Qt3中使用例如UIC oform cpp iform hform ui这样的方式来生成表单的CPP文件 但在Qt4中 UIC已经作了修改 不能输出表单的CPP文件由C 编译器编译所有 h和 cpp文件 QtDesigner功能框图 Qt程序开发过程 1 使用designer设计界面 添加窗口组件建立信号槽连接编写事件处理函数保存工程为 ui文件 得到一个主窗口类2 编写main cpp文件进行主窗口类的实例化及显示3 设置编译所需的环境变量QtDIR 4 使用qmake生成 pro工程文件 root IntelQt4 qmake project5 通过qmake自动生成makefile文件 root IntelQt4 qmake6 make生成可执行文件7 运行 2 3Qt E和Qtopia开发模型 Qt E与Qt X11比较 Qt E与Qt X11比较 Qt Embedded通过QtAPI与LinuxI O设施直接交互 成为嵌入式Linux端口 同Qt X11相比 Qt E很节省内存 不需要X服务器或Xlib库 它在底层摈弃了Xlib 采用Framebuffer 帧缓存 作为底层图形接口 同时 将外部输入设备抽象为keyboard和mouse输入事件 Qt Embedded的应用程序可以直接写内核缓冲帧 这可避免开发者使用繁琐的Xlib Server系统 Qtopia Qtopia是一种全方位的应用开发平台 可用于基于嵌入式Linux的PDA 移动电话 Webpads 以及其他移动计算设备 Qtopia构建于Qt E之上 是专为基于Linux的消费电子产品提供和创建图形用户界面而设计的 常见的有两种版本 QtopiaPhone版 专为基于Linux的智能电话和多功能电话设计 QtopiaPDA版 专为基于Linux的PDA设计 Qtopia特色 视窗操作系统同步窗口开发环境本地化支持游戏和多媒体PIM应用程序输入法个性化选项Internet应用程序java集成无线支持 Qt E开发模型 1 2 嵌入式软件开发通常都采用交叉编译的方式进行 基于Qt E和Qtopia的GUI应用开发也采用这样的模式 先在宿主机上调试应用程序 调试通过后 经过交叉编译移植到目标板上 Qt E直接写入帧缓存 在宿主机上则是通过qvfb virtualFramebuffer 来模拟帧缓存 qvfb是X窗口用来运行和测试Qtopia应用程序的系统程序 qvfb使用了共享内存存储区域 虚拟的帧缓存 来模拟帧缓存并且在一个窗口中模拟一个应用程序来显示帧缓存 显示的区域被周期性的改变和更新 Qt E开发模型 2 2 宿主机移植所需环境变量声明 exportQTDIR usr lib Qt4exportQTINC usr lib Qt4 includeexportQTLIB usr lib Qt4 libexportPATH QTDIR bin PATH Qt E信号与插槽 信号与插槽是Qt自定义的一种通信机制 它独立于标准的从C C 语言 它的实现必须借助于moc M

温馨提示

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

评论

0/150

提交评论