您好,欢迎访问三七文档
嵌入式系统开发原理与实践陈文智等编著清华大学出版社重点大学计算机专业系列教材提纲•1.嵌入式GUI简介•2.XWindows•3.Qt1.嵌入式GUI简介•嵌入式GUI设计一般来说包括以下3个方面:–硬件设计,通过LCD控制器把LCD显示器和开发系统连接起来。–驱动程序设计,为输出输入设备如LCD设计驱动程序,使硬件能驱动起来–用户界面程序设计,使用嵌入式系统提供的函数库进行图形化程序设计•目前在嵌入式系统比较流行的图形用户界面GUI:–Qt/Embedded–MicroWindows–OpenGUI–MiniGUI–Tiny-X•Qt/Embedded–由Qt库开发商TrollTech()发布的面向嵌入式系统的Qt版本。–Qt/Embedded是一个C++函数库,声称最少可以剪裁到630KB。–Qt/Embedded库目前主要针对手持式信息终端。–其开发过程基于一种面向对象的思想,所以用户对其对象的扩展是相当容易的,它还支持真正的组件编程。•MicroWindows–2005年更名为Nano-XWindow–MicroWindows()是一个开放源码的项目,目前由美国CenturySoftware公司主持开发。–MicroWindows是一个基于典型客户端/服务器体系结构的GUI系统,基本分三层:最底层是面向图形输出和键盘、鼠标或触摸屏的驱动程序;中间层提供底层硬件的抽象接口,并进行窗口管理;最高层分别提供兼容于XWindows和WindowsCE的API。•OpenGUI–OpenGUI()在Linux系统上已经存在很长时间了。最初名字叫做FastGL,只支持256色的线性显存模式,但目前也支持其他显示模式,并且支持多种操作系统平台,例如MS-DOS、QNX和Linux等。–OpenGUI比较适合于基于x86平台的实时系统,可移植性比较差。•MiniGUI–MiniGUI()是由中国人主持、并由许多自由软件开发人员支持的一个自由软件项目,其目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统,比较适合于工控领域的应用。–特点:方便的编程接口、使用了图形抽像层和输入抽像层、多字体和多字符集支持、多线程机制等。–魏永明:1998年毕业于清华大学精密仪器系,获工学硕士学位。飞漫软件总裁2.XWindows架构•XWindows系统最先是在UNIX系统上使用的图形用户界面,是基于网络的GUI系统,采用客户端/服务器的设计概念•XWindows由3部分组成:客户端、服务器和X协议–在XWindows系统中运行的应用叫做客户端。客户程序并不直接在屏幕上绘制或操纵任何图形,而是和X服务器进行通信,由X服务器完成所有的绘图工作并控制有关的显示的各个方面。–X协议是X的软件系统基础,它是应用层协议,位于X服务器和X客户端应用程序之间,包括由客户端发送到服务器的请求以及由服务器发送到客户端的事件和错误消息等。–X服务器是管理屏幕以及输入设备的程序。–客户端/服务器思想:一个客户端应用程序通过套接接口和X服务器进行通信•本地套接字•网络套接字•XWindows是事件驱动,大部分时间处于一种等待事件发生的状态–XWindows可以处理所有的I/O资源,比如鼠标输入、触摸屏和LCD显示等。一旦这些资源触发事件,X服务器就会根据需要把它们返回客户程序。X服务器事件、X服务器以及应用程序之间的交互X服务器事件队列窗口(ID,0)的窗口关闭事件窗口(ID,1)的窗口激活事件窗口(ID,2)的触摸屏事件窗口(ID,2)中的应用程序通过套接字接口发送应用程序的事件应用程序通过套接字给X服务器发送操作请求•XWindows的基本的API函数库:Tiny-X系统框架•TinyX是标准X-windows系统的简化版,是KdriverTinyXServer的缩写。设计目标是为了在小容量内存的环境下运行,非常适合用作嵌入式linux的GUI系统•采用标准的Client/Server体系结构•在嵌入式系统中使用Tiny-X图形用户界面开发产品,上层的应用程序的编写很方便•Tiny-X系统架构:•LinuxFrameBuffer:一个Linux硬件设备,让图形绘制函数可以直接使用显示设备的显存,在屏幕上绘制图形•TinyX(Xfbdev):精简的Xlib类库•Glib:一些基础数据结构和典型的C程序需要功能的函数的封装•GDK:建立在Xlib上的针对图形图像类封装的底层图形库•GTK:建立在Xlib和GDK上的高级面向对象的类库•QVWM:窗口管理器•Glade:GTK的继承开发环境Qt:嵌入式GUI应用程序实验•Qt集成开发工具的使用(1)、新建工程文件利用Qt开发应用程序,首先应建立一个工程文件,从File菜单选中New,从对话框中选中C++Project图标,按OK按钮将新建工程保存为test.pro(Qt工程的扩展名为.pro);Qt集成开发平台的运行界面嵌入式GUI应用程序实验嵌入式GUI应用程序实验•(2)、建立窗体和添加控件选中File菜单中的New菜单,双击dialog图标,建立一个对话框图形界面,可以在属性编辑栏中修改窗体或控件的相关属性。根据设计需要,在窗体上添加一些常用如按钮、文本框等控件•(3)、保存窗体选中File菜单中的Save菜单或工具条中的保存图标将新建的界面窗体保存为test.ui,用户界面窗体文件扩展名为.ui。嵌入式GUI应用程序实验嵌入式GUI应用程序实验•(4)、main.cpp文件自动配置如果在工程中具有ui界面文件,Qt可以自动配置生成main.cpp文件,选中File菜单中的New菜单,双击C++Main-File图标,Qt自动将当前窗体文件作为主界面,并自动生成main.cpp文件嵌入式GUI应用程序实验嵌入式GUI应用程序实验•(5)、Qt的uic工具的使用–在嵌入式平台中无法对ui界面文件进行编译,因此Qt提供将ui文件转换成标准的C++头文件(.h)与实现文件(.cpp)的uic工具。uic工具还可以完成C++子类继承文件的转换和将图片文件转换成头文件的形式。现介绍利用uic工具将前面建立的test.ui文件转换成标准的C++头文件和实现文件(uic具体使用方法参考qt文档)。–生成C++头文件[root@localhosttest]$uic–otest.htest.ui–生成C++实现文件(.cpp文件)[root@localhosttest]$uic–otest.cpp–impltest.htest.ui–将ui文件转换为标准C++头文件和实现文件后,便可以利用转换后的C++头文件和实现文件替代原来的ui文件。–在工程预览中选中test.ui,单击右键,从弹出的菜单中选中”removeformfromproject”菜单,移除Qt界面文件test.ui,然后选中Project菜单中的AddFile菜单,将转换后的C++头文件和实现文件添加到工程中。嵌入式GUI应用程序实验嵌入式GUI应用程序实验•(6)Qt应用程序的编译基于PC平台的Qt应用程序编译在PC平台编译Qt应用程序,只需利用Qt提qmake工具生成编译应用程序所需的Makefile文件,然后利用make命令对应用程序进行编译[root@localhosttest]$qmake–oMakefiletest.pro[root@localhosttest]$make–编译成功后,可利用file命令查看编译的应用程序格式并可直接在PC终端运行编译好的应用程序嵌入式GUI应用程序实验•脚本切换–Qt开发的程序既能够在Linux桌面系统上运行,也能够在ARM-linux系统上运行。–切换的方式是用下面两个指令•sourceqt-2.3.7-x86:针对桌面系统•sourceqt-2.3.7-arm:针对arm平台嵌入式Qt平台的搭建的脚本运行方式:source文件名称针对PC机平台的qt-2.3.7-x86可运行的脚本:•#!/bin/shQT_DIR=/root/work/QtunsetQTDIR,QPEDIR,TMAKEPATHQTDIR=$QT_DIR/qt-2.3.7-x86QPEDIR=$QT_DIR/qtopia-1.7.0-x86LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATHPATH=$QTDIR/bin:$PATHTMAKEPATH=$QT_DIR/tmake-1.11/lib/qws/linux-x86-g++exportQTDIRQPEDIRLD_LIBRARY_PATHPATH嵌入式Qt平台的搭建针对ARM平台的qt-2.3.7-arm可运行的脚本:•#!/bin/sh•QT_DIR=/root/work/QtunsetQTDIR,QPEDIR,TMAKEPATHQTDIR=$QT_DIR/qt-2.3.7-armQPEDIR=$QT_DIR/qtopia-1.7.0-armLD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib:$LD_LIBRARY_PATHPATH=$QTDIR/bin:$PATHTMAKEPATH=$QT_DIR/tmake-1.11/lib/qws/linux-arm-g++exportQTDIRQPEDIRLD_LIBRARY_PATHPATH嵌入式GUI应用程序实验•基于ARM平台的Qt应用程序编译在编译基于ARM开发板的Qt应用程序时,应确保交叉编译工具arm-linux-g++在环境参数PATH中和tmake工具的正确配置。由于嵌入式平台中无法对ui界面文件进行编译,除了将ui界面文件转换为标准的C++文件之外,还要对利用Qt集成开发平台生成的工程文件进行修改,否则无法编译,Qt集成开发平台生成的原始工程文件test.pro内容为:SOURCES+=main.cpp\test.cppHEADERS+=test.hunix{UI_DIR=.uiMOC_DIR=.mocOBJECTS_DIR=.obj}TEMPLATE=appCONFIG+=qtwarn_onreleaseLANGUAGE=C++嵌入式GUI应用程序实验•修改后的工程文件内容为(红字部分为新增内容,用于支持qtopia):•工程文件修改后,然后利用tmake工具生成用于编译应用程序的Makefile文件。•[root@localhosttest]$tmake–oMakefiletest.pro•[root@localhosttest]$makeSOURCES+=main.cpp\test.cppHEADERS+=test.hTEMPLATE=appCONFIG+=qtopiaqtwarn_onreleaseLANGUAGE=C++嵌入式GUI应用程序实验•编译后,可用file命令查看编译的应用程序格式嵌入式GUI应用程序实验•(7)、嵌入式Qt应用程序的运行方法测试程序下载运行将编译好的ARM格式的应用程序test下载到开发板的/usr/qpe/bin目录下,并利用chmod命令修改test的属性[root@bin]$chmod755test在目标板的/usr/qpe/apps/applications目录下新建一个test.desktop文件:并重启开发板[DesktopEntry]Comment=AQttestProgramExec=testIcon=ClockType=ApplicationName=TestName[zh_CN]=Qt测试程序Qt编程工具的使用方法:信号与槽信号(signal)与槽(slot)的使用方法•槽的建立方法Qt编程工具的使用方法信号(signal)与槽(slot)的使用方法•信号与槽的连
本文标题:9-嵌入式GUI
链接地址:https://www.777doc.com/doc-3267053 .html