17_嵌入式QT编程.ppt_第1页
17_嵌入式QT编程.ppt_第2页
17_嵌入式QT编程.ppt_第3页
17_嵌入式QT编程.ppt_第4页
17_嵌入式QT编程.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、,QT 编程,内容摘要,嵌入式GUI简述 QT 程序设计概述 基于Qt Designer 的编程方法 移植Qt/Embedded环境,嵌入式GUI简介,GTK(C),QT(C+),GNOME,GPE,KDE,OPIE/Qtopia,主流的Linux窗口系统,PC,嵌入式,嵌入式GUI简述,Microwindows,Mirowindows是嵌入式系统中广为使用的一种图形用户接口,其官方网站是:。这个项目的早期目标是在嵌入式Linux平台上提供和普通个人电脑上类似的图形用户界面。 作为PC上X-Windows的替代品,Microwindows提供

2、了和X-Windows类似的功能,但是占用的内存要少得多,根据用户得配置,Microwindows占用得内存资源在100KB-60KB。,嵌入式GUI简述,Microwindows,此外,Microwindows能在宿主机上仿真目标机。这意味着基于Linux的Microwindows应用程序的开发和调试可以在普通的个人电脑上进行,而不需要使用普通嵌入式软件的“宿主机目标机”调试模式,从而大大加快了开发速度。 Microwindows的核心基于显示设备接口,因此可移植行很好,microwindows有自己的Framebuffer,因此它并不局限于Linux开发平台,在eCos、FreeBSD、R

3、TEMS等操作系统上都能很好地运行。 Mincrowindows是完全免费的一个用户图形系统。,嵌入式GUI简述,MiniGUI,MiniGUI是由北京飞漫软件技术有限公司主持的一个自由软件项目(遵循GPL条款),其目标是为基于实时嵌入式系统提供一个轻量级的图形用户界面支持系统。 MiniGUI为应用程序定义了一组轻量级的窗口和图形设备接口。利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形。用户也可以利用MiniGUI建立菜单、按钮、列表框等常见的GUI元素。,嵌入式GUI简述,Qt,Qt是Trolltech公司的标志性产品,是一个跨平台的C+图形用户界面(GUI)工具

4、包。现已被诺基亚收购,由诺基亚的专门部门进行技术支持和维护。 Qt 应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置 Qt/Windows(Windows XP, 2000, NT 4, Me/98) Qt/Mac(Mac OS X) Qt/X11(Linux, Solaris, HP-UX, IRIX, AIX等) Qt对不同平台的专门API进行了专门的封装(文件处理,网络等),嵌入式GUI简述,Qt特征,引入一种用于无缝对象通讯的被称为信号和槽的非常强大的机制 可查询和可设计的属性, 强大的事件和事件过滤器, 根据上下文进行国际化的

5、字符串翻译, 完善的时间间隔驱动的计时器使得在一个事件驱动的图形界面程序中很好地集成许多任务成为可能。 以一种自然的方式组织对象所有权的分层次和可查询的对象树。 被守护的指针,QGuardedPtr,当参考对象被破坏时,可以自动地设置为无效,不像正常的C+指针在它们的对象被破坏的时候变成了“摇摆指针”。,嵌入式GUI简述,Qt/Embedded Qt/Embedded(简称QtE)是一个专门为嵌入式系统设计图形用户界面的工具包。 嵌入式系统地要求是小而快速,而QtE就能帮助开发者为满足这些要求开发强壮地应用程序。 QtE是模块化和可裁剪地。开发者可以选取他所需要的一些特性,而裁剪掉所不需要的。

6、这样,通过选择所需要的特性,QtE的映像变得很小,最小只有600K左右。 用QtE开发的应用程序要移植到不同平台时,只需要重新编译代码,而不需要对代码进行修改。,嵌入式GUI简述,与硬件平台无关:QtE可以应用在所有主流平台和CPU上。支持所 有主流的嵌入式Linux,对于在Linux上的QtE的基本要求只不过是 Frame Buffer设备和一个C+编译器(如gcc)。Qte同时也支持很 多实时的嵌入式系统,如QNX和WindowsCE。 提供压缩字体格式:即使在很小的内存中,也可以提供一流的字体 支持。 支持多种的硬件和软件的输入。 支持Unicode,可以轻松地使程序支持多种语言。 支持

7、反锯齿文本和Alpha混合的图片。,QtE 特征,嵌入式GUI简述,QtE虽然公开代码和技术文档,但是它不是免费的, 当开发者的商业化产品需要用到他的运行库时,必须 向诺基亚公司支持license费用,如果开发的东西不用 于商业用途则不需要付费。 QtE由于平台无关性和提供了很好的Gui编程接口, 在许多嵌入式系统中得到了广泛的应用,是一个成功 的嵌入式GUI产品。,QtE 特征,嵌入式GUI简述,Qtopia,Trolltech公司在QtE的基础上开发了一个应用的环 境Qtopia,这个应用环境为移动和手持设备开发。 其特点就是拥有完全的、美观的GUI,同时它也提供 可上百个应用程序用于管理

8、用户信息、办公、娱乐、 Internet交流等。 已经有很多公司采用了Qtopia来开发他们主流的PDA。,嵌入式GUI简述,Qtopia是一种全方位的应用开发平台,它可用于基于嵌入式linux的PDA,移动电话,web pads,以及其他移动计算设备。 Qtopia构建于Qt/Embedded之上,是专为基于linux的消费电子产品提供和创建图形用户界面而设计的。常见的有两种版本: Qtopia Phone版:专为基于linux的智能电话和多功能电话设计。 Qtopia PDA版:专为基于linux的PDA设计。,嵌入式GUI简述,Qtopia特色: 视窗操作系统;同步窗口;开发环境;本地化

9、支持;游 戏和多媒体;PIM应用程序;输入法;个性化选项; internet应用程序;java集成;无线支持;,嵌入式GUI简述,Qt编程核心技术,QT对象模型 元对象系统 信号和插槽 属性 QObject类 对象树 事件处理,QT 程序设计概述,元对象系统,是一个C+扩展,使得QT更适合真正的组件GUI编程 使用元编译器moc产生能被标准C+编译器访问的附加C+代码 带有moc预编译器的C+基本上提供了面向对象的灵活性,并保持了C+的执行效率和扩展性,QT 程序设计概述,信号和插槽,在Qt程序中,利用信号(signal)和插槽(slot)机制进行对象间的通信 事件处理的方式也是回调 当对象状

10、态发生改变的时候,发出signal通知所有的slot接收signal,尽管它并不知道哪些函数定义了slot,而slot也同样不知道要接收怎样的signal signal和slot机制真正实现了封装的概念,slot除了接收signal之外和其它的成员函数没有什么不同,而且signal和slot之间也不是一一对应的。,QT 程序设计概述,Signal和Slot的声明(1/2),在Qt程序设计中,凡是包含signal和slot的类中都要加上Q_OBJECT的定义 class Student : public QObject Q_OBJECT public: Student() myMark = 0;

11、 int mark() const return myMark; public slots: void setMark(int newMark); signals: void markChanged(int newMark); private: int myMark; ;,QT 程序设计概述,Signal和Slot的声明(2/2),signal的发出一般在事件的处理函数中,利用emit发出signal,在下面的例子中在在事件处理结束后发出signal void Student:setMark(int newMark) if (newMark!= myMark) myMark = newMark

12、; emit markChanged(myMark); ,QT 程序设计概述,Signal和Slot的连接(1/2),在signal和slot声明以后,需要使用connect()函数将它们连接起来。 connect()函数属于QObject类的成员函数,它能够连接signal和slot,也可以用来连接signal和signal,函数原形如下: bool QObject:connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) static 其中第一

13、个和第三个参数分别指出signal和slot是属于那个对象或组件,QT 程序设计概述,Signal和Slot的连接(2/2),在使用connect()函数进行来接的时候,还需要用到SIGNAL()和SLOT()这两个宏,使用方法如下: QLabel *label = new QLabel; QScrollBar *scroll = new QScrollBar; QObject:connect( scroll,SIGNAL(valueChanged(int), label, SLOT(setNum(int) );,QT 程序设计概述,Signal和Slot的连接方式,QT 程序设计概述,取消S

14、ignal和Slot连接,取消一个连接 disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError(); 取消一个连接不是很常用,因为Qt会在一个对象被删除后自动取消这个对象所包含的所有的连接,QT 程序设计概述,属性,属性也是一个类的成员 在类声明中用宏Q_PROPERTY来声明 只能在继承于QObject的子类中声明 设置和得到属性的成员函数如下: QObject:setProperty() QMetaObject:propertyNames() QMetaObject:property (),QT 程序设计概述,QObject类,

15、QObject是Qt类体系的唯一基类,是Qt各种功能的源头活水,就象MFC中的CObject和Dephi中的TObject 对象树:QObject在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject时,它就被添加到父对象的children() 列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。 事件:事件是由窗口系统或qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还

16、有一些,比如定时器等,是由系统独立产生的。,QT 程序设计概述,事件运行机制,事件循环,QT 程序设计概述,QApplication,QApplication和QWidget都是QObject类的子类 QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的,QT 程序设计概述,QWidget,QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,

17、它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上 QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类,QT 程序设计概述,一个完整的Qt程序,1 #include 2 #include 3 int main (int argc, char *argv ) 4 5 QApplication app (argc, argv); 6 QLabel *label = new QLabel (Hello Qt!); 7 label-show (); 8 return app. exec ();

18、9 ,QT 程序设计概述,Qt Designer,直接使用代码来直接编写GUI无疑是非常痛苦的,好在QT提供了界面开发工具:QTdesigner Qt应用程序除了使用手工编写代码的方式外,还可以用过Qt Desinger来完成 Qt Designer的功能十分强大,界面类似于VB,而且还提供了大量可供编程使用的组件,基于Qt Designer的程序设计,基于Qt Designer的程序设计,基于Qt Designer程序设计(1/4),在使用Qt Designer程序开发时,一般要涉及到下面几个步骤: 1.创建和初始化子部件 2.设置子部件布局 3.设置Tab键次序(不是必须) 4.建立信号与

19、插槽的连接 5.编写事件处理函数,基于Qt Designer的程序设计,基于Qt Designer程序设计(2/4),1.创建并布置部件,2.对部件使用布局管理,3.建立信号与插槽的连接,基于Qt Designer的程序设计,基于Qt Designer程序设计(3/4),编辑两个部件之间信号与插槽之间的连接方式,基于Qt Designer的程序设计,基于Qt Designer程序设计(4/4),Qt Designer下不同风格的预览,基于Qt Designer的程序设计,Qt Designer的工作过程,Qt Designer将工程文件组织成.ui的文件 由.ui文件生成 .h文件 .ui -

20、xml UIC -o form.h form.ui 需要注意的是,在QT3中使用例如UIC -o form.cpp -i form.h form.ui这样的方式来生成表单的CPP文件,但在QT4中,UIC已经作了修改,不能输出表单的CPP文件 由C+编译器编译所有.h和.cpp文件,基于Qt Designer的程序设计,Qt Designer 功能框图,基于Qt Designer的程序设计,Qt程序开发过程,使用designer 设计界面,添加窗口组件 建立信号槽连接 编写事件处理函数 保存工程为.ui文件,得到一个主窗口类 2. 编写main.cpp文件进行主窗口类的实例化及显示 3. 设置编译所需的环境变量 QTDIR =,

温馨提示

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

评论

0/150

提交评论