版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式用户图形界面编程第一页,共六十八页,编辑于2023年,星期日1、嵌入式图形系统简介1.1Linux图形系统的发展史linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的。第二页,共六十八页,编辑于2023年,星期日1、嵌入式图形系统简介1.1Linux图形系统的发展史图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统linux和Xfree的关系就相当于当年的DOS和WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样XFree只是linux下的一个应用程序而已,不是系统的一部分。第三页,共六十八页,编辑于2023年,星期日1、嵌入式图形系统简介1.1Linux图形系统的发展史但是X的存在可以方便用户使用电脑。WINDOWS95及以后的版本就不一样了,他们的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器。这也是WINDOWS和linux的重要区别之一。第四页,共六十八页,编辑于2023年,星期日1、嵌入式图形系统简介1.1Linux图形系统的发展史
XWindow:业界标准
OpenLook:来自SUN与AT&T Motif:来自IBM/HP的OSF CDE :UNIX的标准图形界面
QT :KDE的开发基础
GNOME :信仰的产物第五页,共六十八页,编辑于2023年,星期日1、嵌入式图形系统简介1.2嵌入式图形系统的发展史
早期嵌入式系统功能简单,对图形用户界面需求并不是太大。而且当时的图形系统对硬件要求太高,在嵌入式上实现几乎没有可能。后来,应市场需求产生一些高级GUI工具包,使得嵌入式linux下的图形开发成为可能,而且易于编写出更好、更漂亮的界面。第六页,共六十八页,编辑于2023年,星期日1、嵌入式图形系统简介1.3常用的几种嵌入式GUI工具包紧缩的XWindow系统MicroWindowsMiniGUIOpenGUIQt/Embedded第七页,共六十八页,编辑于2023年,星期日1.3.1TinyXTinyX,是标准X-Windows在嵌入式系统的小巧实现,作为一个图形环境,X-Windows是成功的,但由于在体系接口上的原因,限制了它对游戏、多媒体的支持能力。第八页,共六十八页,编辑于2023年,星期日1.3.2MicrowindowsMirowindows是嵌入式系统中广为使用的一种图形用户接口,其官方网站是:。这个项目的早期目标是在嵌入式Linux平台上提供和普通个人电脑上类似的图形用户界面。MicroWindows,其主要特色在于提供了C/S体系结构,同时也提供了相对完善的图形功能。但却无任何硬件加速能力,图形引擎中也存在着许多未经优化的低效算法。第九页,共六十八页,编辑于2023年,星期日1.3.2MicrowindowsMicrowindows的核心基于显示设备接口,因此可移植行很好,microwindows有自己的Framebuffer,因此它并不局限于Linux开发平台,在eCos、FreeBSD、RTEMS等操作系统上都能很好地运行。此外,Microwindows能在宿主机上仿真目标机。这意味着基于Linux的Microwindows应用程序的开发和调试可以在普通的个人电脑上进行,而不需要使用普通嵌入式软件的“宿主机-目标机”调试模式,从而大大加快了开发速度。Mincrowindows是完全免费的一个用户图形系统。第十页,共六十八页,编辑于2023年,星期日1.3.3MiniGUIMiniGUI是由北京飞漫软件技术有限公司主持的一个自由软件项目(遵循GPL条款),其目标是为基于Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。MiniGUI为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形。用户也可以利用MiniGUI建立菜单、按钮、列表框等常见的GUI元素。第十一页,共六十八页,编辑于2023年,星期日1.3.3MiniGUI用户可以将MiniGUI配置成“MiniGUI-Threads”或者“MiniGUI-Lite。运行在MiniGUI-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程中运行。相反,运行在MiniGUI-Lite上的每个程序是单独的进程,每个进程也可以建立多个窗口。第十二页,共六十八页,编辑于2023年,星期日1.3.4OpenGUIOpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。第十三页,共六十八页,编辑于2023年,星期日2,QT/E
Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界面的工具包。Qt是挪威Trolltech软件公司的产品,它为各种系统提供图形用户界面的工具包,QtE就是Qt的嵌入式版本。第十四页,共六十八页,编辑于2023年,星期日2,QT/E注意:QT与QT/Embedded的区别
第十五页,共六十八页,编辑于2023年,星期日2,QT/E
第十六页,共六十八页,编辑于2023年,星期日2.1QT/E特点2.1.1跨平台
可支持的平台包括:◆MS/Windows95、Windows98、WindowsNT4.0、Windows2000、WindowsXP;◆Unix/X11Linux、SunSolaris、HP-UX、CompaqTrue64Unix、IBMAIX、SGIIRIX和很多其它X11平台;◆MacintoshiMacOSX;◆嵌入式的,包含有FramBuffer的Linux平台。第十七页,共六十八页,编辑于2023年,星期日2.1QT/E特点2.2.2资源丰富trolltech的主页:http://www./支持匿名访问的FTP:新闻组服务器:非官方的Qt文档中文翻译小组:/qt/index.html第十八页,共六十八页,编辑于2023年,星期日2.1QT/E特点2.2.3工具丰富提供了构建(qmake)、可视化设计(uic和qdesigner)、国际化(linguist)、文档系统(assistant)等一系列非常好用的工具。尤其是文档系统,绝对可以称得上是出色。
第十九页,共六十八页,编辑于2023年,星期日2.1QT/E特点2.2.4丰富的API函数Qt/Embedded也可以看成是一组用于访问嵌入式设备的QtC++API;Qt/Embedded的Qt/X11,Qt/Windows和Qt/Mac版本提供的都是相同的API和工具。第二十页,共六十八页,编辑于2023年,星期日2.1QT/E特点2.2.5运行需要资源少、功能强大相对X窗口下的嵌入解决方案而言,Qt/Embedded只要求一个较小的存储空间(Flash)和内存。Qt/Embedded可以运行在不同的处理器上部署的Linux系统,只要这个系统有一个线性地址的缓冲帧并支持C++的编译器。第二十一页,共六十八页,编辑于2023年,星期日2.1QT/E特点2.2.6功能可裁减Qt/Embedded提供了大约200个可配置的特征,第二十二页,共六十八页,编辑于2023年,星期日3,QTOPIA3.1简介Qtopia是基于Qt编写的一个用于手持设备的用户信息管理软件,它集成了很多实用的程序。市面上买到的预装linux操作系统的arm9开发版,开机后看到的图形界面多是qtopia。第二十三页,共六十八页,编辑于2023年,星期日3,QTOPIA3.1简介第二十四页,共六十八页,编辑于2023年,星期日3,QTOPIA3.2QTE和Qtopia开发模型LinuxKernelFrame-bufferQT/EmbeddedQT/X11XlibXWindowServerQTAPIQTOPIAorOtherApplication第二十五页,共六十八页,编辑于2023年,星期日课堂回顾1,什么是frameBuffer?2,QT与QT/E最大的不同?3,QTOPIA与QT的关系?4,众多嵌入式图形开发库中,为什么大多数人选择QT/E?第二十六页,共六十八页,编辑于2023年,星期日4,QTE开发环境搭建工具软件描述变量声明Tmake-1.11生成Makefile文件TMAKEDIR/TMAKEPATH/PATHQt-x11-2.3.2Qvfb-虚拟帧缓存工具Uic-用户界面编辑器DesignerQt图形设计器LD_LIBRARY_PATH_/PATHQt-embedded-2.3.7Qt库支持libqte.soQTEDIR/LD_LIBRARY_PATH/PATHQtopia-free-1.7.0应用程序开发包桌面环境QPEDIR/LD_LIBRARY_PATH/PATH宿主机移植所需工具及环境变量声明:第二十七页,共六十八页,编辑于2023年,星期日4,QTE开发环境搭建4.1tmake安装tarxfvztmake-1.11.tar.gzmvtmake-1.11tmakeexportTMAKEDIR=$PWD/tmakeexportTMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++第二十八页,共六十八页,编辑于2023年,星期日4,QTE开发环境搭建4.2QT编译tarxfvzqt-x11-2.3.2.tar.gzmvqt-2.3.2qt-x11cdqt-x11exportQTDIR=$PWDechoyes|./configure-static-no-xft-no-opengl-no-smmake-Csrc/moccpsrc/moc/mocbinmake-Csrcmake-Ctools/designermake-Ctools/qvfbcptools/qvfb/qvfbbinstripbin/uicbin/mocbin/designerbin/qvfb第二十九页,共六十八页,编辑于2023年,星期日4,QTE开发环境搭建4.3QTE编译tarxfvzqt-embedded-2.3.7.tar.gzmvqt-2.3.7/qtcpqt-x11/bin/?*qt/binexportQTDIR=$PWD/qtexportQPEDIR=$PWD/qtopiaexportTMAKEDIR=$PWD/tmakeexportTMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++exportPATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATHcdqtmakecleancp../qtopia/src/qt/qconfig-qpe.hsrc/tools/(echoyes;echoyes)|./configure-platformlinux-generic-g++-qconfigqpe-depths16,24,32make-Csrc第三十页,共六十八页,编辑于2023年,星期日4,QTE开发环境搭建4.4QPE编译tarxfvzqtopia-free-1.7.0.tar.gzmvqtopia-free-1.7.0qtopiacdqtopia/src./configure-platformlinux-generic-g++make第三十一页,共六十八页,编辑于2023年,星期日4,QTE开发环境搭建4.5运行第三十二页,共六十八页,编辑于2023年,星期日当在PC上模拟Qtopia的运行时,需要用到对应Qt版本的库文件,因此需要修改/etc/ld.so.conf文件以适应刚刚安装的Qt(Redhat安装时带有Qt库,但不适合我们最新安装的版本),修改后的ld.so.conf文件内容如下:/sbc2410/x86-qtopia/qt/lib/sbc2410/x86-qtopia/qtopia/lib/usr/kerberos/lib/usr/X11R6/lib/usr/lib/sane修改完此文档后,为了让刚刚安装的库生效,必须运行ldconfig。至此Qt的开发缓建已经建立。第三十三页,共六十八页,编辑于2023年,星期日(1)设置环境变量exportQTDIR=$PWD/qtexportQPEDIR=$PWD/qtopiaexportTMAKEDIR=$PWD/tmakeexportTMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++exportPATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH(2)启动虚拟帧缓存“$qvfb&”
或“$qvfb-width640–height480&”(3)运行qtopia qpe&第三十四页,共六十八页,编辑于2023年,星期日5,QTE开发关键技术5.1信号与插槽信号和槽用于对象间的通讯。信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分。第三十五页,共六十八页,编辑于2023年,星期日信号与插槽回调技术特点:他们不是类型安全的其次回调和处理函数是非常强有力地联系在一起的第三十六页,共六十八页,编辑于2023年,星期日信号与插槽信号与插槽机制特点:类型安全信号和槽是宽松地联系在一起的速度慢第三十七页,共六十八页,编辑于2023年,星期日信号与插槽第三十八页,共六十八页,编辑于2023年,星期日信号与插槽第三十九页,共六十八页,编辑于2023年,星期日信号与插槽一个最小的C++类声明如下:classFoo{public: Foo(); intvalue()const{returnval;} voidsetValue(int);private: intval;};第四十页,共六十八页,编辑于2023年,星期日信号与插槽一个小的Qt类如下:classFoo:publicQObject{
Q_OBJECT
public: Foo(); intvalue()const{returnval;}publicslots: voidsetValue(int);signals: voidvalueChanged(int);private: intval;};第四十一页,共六十八页,编辑于2023年,星期日信号与插槽槽可以由应用程序的编写者来实现。这里是Foo::setValue()的一个可能的实现:voidFoo::setValue(intv){if(v!=val) { val=v; emitvalueChanged(v); }}第四十二页,共六十八页,编辑于2023年,星期日信号与插槽把两个对象连接在一起的一种方法:Fooa,b;connect(&a,SIGNAL(valueChanged(int)),&b,SLOT(setValue(int)));a.setValue(79);//a==79b==79b.setValue(11);//a==undefinedb==11b.value();第四十三页,共六十八页,编辑于2023年,星期日信号与插槽5.2元对象编译器(MOC)作用MOC是用来专门处理QT对C++的扩展部分用法第四十四页,共六十八页,编辑于2023年,星期日6,实例一一、代码编辑二、程序编译第四十五页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);hellobtn.resize(100,20);a.setMainWidget(&hellobtn);hellobtn.show();returna.exec();}第四十六页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);hellobtn.resize(100,20);a.setMainWidget(&hellobtn);hellobtn.show();returna.exec();}第四十七页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);hellobtn.resize(100,20);a.setMainWidget(&hellobtn);hellobtn.show();returna.exec();}第四十八页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){
QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);hellobtn.resize(100,20);a.setMainWidget(&hellobtn);hellobtn.show();returna.exec();}第四十九页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);hellobtn.resize(100,20);a.setMainWidget(&hellobtn);hellobtn.show();returna.exec();}第五十页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);
hellobtn.resize(100,20);a.setMainWidget(&hellobtn);hellobtn.show();returna.exec();}第五十一页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);hellobtn.resize(100,20);
a.setMainWidget(&hellobtn);hellobtn.show();returna.exec();}第五十二页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);hellobtn.resize(100,20);a.setMainWidget(&hellobtn);
hellobtn.show();returna.exec();}第五十三页,共六十八页,编辑于2023年,星期日#include<qapplication.h>#include<qpushbutton.h>intmain(intargc,char**argv){QApplicationa(argc,argv);
QPushButtonhellobtn("Helloworld!",0);hellobtn.resize(100,20);a.setMainWidget(&hellobtn);hellobtn.show();
returna.exec();}第五十四页,共六十八页,编辑于2023年,星期日6,实例一二、程序编译1,生成工程文件Progen–o2,生成MakefileTmake–oMakefile3,编译make第五十五页,共六十八页,编辑于2023年,星期日6,实例二一、工程创建二、界面设计三、代码编辑四、程序编译第五十六页,共六十八页,编辑于2023年,星期日6,实例三(信号与槽)一、工程创建二、界面设计三、代码编辑四、程序编译第五十七页,共六十八页,编辑于2023年,星期日课堂回顾 1、怎样将信号连接到槽?2、能否将多个槽连接到一个信号?3、是否能将一个信号连接到其他信号?如果能,应该怎样操作?4、如果编译器报告connect的参数错误,通常会是什么错误?第五十八页,共六十八页,编辑于2023年,星期日7,QT编程模式讨论基本模式子类继承模式ui.h模式第五十九页,共六十八页,编辑于2023年,星期日基本模式第六十页,共六十八页,编辑于2023年,星期日子类继承模式第六十一页,共六十八页,编辑于2023年,星期日子类继承模式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人工代加工合作协议书范文
- 闲置电视机购买协议书范文范本
- 2022年公务员多省联考《申论》真题(宁夏B卷)及答案解析
- 2024年处理废品合同范本
- 机关单位干部三年工作总结
- 吉林师范大学《隶书理论与技法II》2021-2022学年第一学期期末试卷
- 吉林师范大学《合唱IV》2021-2022学年第一学期期末试卷
- 职业培训机构招生宣传方案
- 技术转让合作合同范本
- 2024桥梁工程承包合同
- 计算机及外部设备装配调试员国家职业技能标准(2019年版)
- 《临床决策分析》课件.ppt
- 泪道冲洗PPT学习教案
- 新课程背景下初中语文教学的转变与创新
- 浅谈校园影视在学校教育中的作用
- 咖啡种植标准化规程
- 上海大众汽车商务礼仪培训PPT课件
- 理论力学习题集含答案
- 驱动压在肺保护性通气策略中的研究进展(全文)
- 公路工程施工安全技术规范
- “碑学”、“帖学”献疑.doc
评论
0/150
提交评论