第7章 Qt图形编程.ppt
《第7章 Qt图形编程.ppt》由会员分享,可在线阅读,更多相关《第7章 Qt图形编程.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式应用程序设计嵌入式应用程序设计第7章 Qt图形编程 第1章 搭建嵌入式Linux开发环境第2章 嵌入式文件I/O编程第3章 嵌入式Linux多任务编程第4章 嵌入式Linux进程间通行第5章 嵌入式Linux多线程编程第6章 嵌入式Linux网络编程第第7章章 Qt图形编程图形编程第8章 嵌入式Linux设备驱动编程第9章 Qt聊天项目设计课程安排课程安排:2 7.1 嵌入式GUI简介7.2 Qt/Embedded开发入门7.3 实验内容7.4 小结7.5 思考与练习本章课程:本章课程:3 目前的桌面机操作系统大多有着美观、操作方便、功能齐全的GUI(图形用户界面),例如KDE或者GNO
2、ME。GUI(图形用户界面)是指计算机与其使用者之间的对话接口,可以说,GUI是当今计算机技术的重大成就。它的存在为使用者提供了友好便利的界面,并大大地方便了非专业用户的使用,使得人们从繁琐的命令中解脱出来,可以通过窗口、菜单方便地进行操作。在嵌入式系统中,GUI的地位也越来越重要,但是不同于桌面机系统,嵌入式GUI要求简单、直观、可靠、占用资源小且反应快速,以适应系统硬件资源有限的条件。另外,由于嵌入式系统硬件本身的特殊性,嵌入式GUI应具备高度可移植性与可裁减性,以适应不同的硬件条件和使用需求。7.1 嵌入式GUI简介4 嵌入式GUI特点体积小;运行时耗用系统资源小;上层接口与硬件无关,高
3、度可移植;高可靠性;在某些应用场合应具备实时性。7.1 嵌入式GUI简介5 7.1.1 Qt/EmbeddedQt/Embedded是Trolltech公司(目前已被Nokia收购)为嵌入式系统开发的Qt版本。从Qt 4.1版本开始,Qt/Embedded改名为Qtopia Core,又从Qt 4.4.1版本开始,Qtopia Core又改名为Qt for Embedded Linux.7.1 嵌入式GUI简介6 7.1.1 Qt/EmbeddedQt/Embedded的优缺点:7.1 嵌入式GUI简介7 7.1.2 MiniGUIMniGUI由魏永明先生和众多志愿者开发,是面向实时嵌入式系统
4、的轻量级图形用户界面支持系统。自1999年初遵循GPL条款发布第一个版本以来,MiniGUI已广泛应用于手持信息终端、机顶盒、工业控制系统及工业仪表、便携式多媒体播放器、查询终端等产品和领域。目前,MiniGUI已成为跨操作系统、跨硬件平台的图形用户界面支持系统,可在Linux/uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX、Nucleus、OSE等操作系统以及Win32平台上运行,已验证的硬件平台包括ix86、ARM、PowerPC、MIPS、DragonBall、ColdFire等等。MiniGUI V2.0为基于嵌入式Linux的高端嵌入式设备提供了
5、完整的多进程支持,从而将MiniGUI从中端市场带到了高端市场。最新的MiniGUI V3.0则是继2.0之后的一个重要增强,增加了如外观渲染器技术、双向文本支持、透明控件、独立滚动条控件、UPF字体和位图字体等新的特性。7.1 嵌入式GUI简介8 7.1.2 Microwindow、Tiny X等它由魏永明先生和众多志愿者开发,是面向实时嵌入式系统的轻量级图形用户界面支持系统。自1999年初遵循GPL条款发布第一个版本以来,MiniGUI已广泛应用于手持信息终端、机顶盒、工业控制系统及工业仪表、便携式多媒体播放器、查询终端等产品和领域。目前,MiniGUI已成为跨操作系统、跨硬件平台的图形用
6、户界面支持系统,可在Linux/uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX、Nucleus、OSE等操作系统以及Win32平台上运行,已验证的硬件平台包括ix86、ARM、PowerPC、MIPS、DragonBall、ColdFire等等。MiniGUI V2.0为基于嵌入式Linux的高端嵌入式设备提供了完整的多进程支持,从而将MiniGUI从中端市场带到了高端市场。最新的MiniGUI V3.0则是继2.0之后的一个重要增强,增加了如外观渲染器技术、双向文本支持、透明控件、独立滚动条控件、UPF字体和位图字体等新的特性。7.1 嵌入式GUI简介9
7、 7.1.3 Microwindow、Tiny X等Microwindows Open Source Project成立的宗旨在于针对体积小的装置,建立一套先进的视窗环境,在Linux桌面上通过交叉编译可以很容易地制作出Microwindows的程序。Microwindows能够在没有任何操作系统或其他图形系统的支持下运行,它能对裸显示设备进行直接操作。这样,Microwindows就显得十分小巧,便于移植到各种硬件和软件系统上。然而Microwindows的免费版本进展一直很慢,几乎处于停顿状态,而且至今为止,国内没有任何一家对Microwindows提供全面技术支持、服务和担保的专业公司。
8、Tiny X Server是XFree86 Project的一部分,由Keith Pachard发展起来的,而他本身就是XFree86专案的核心成员之一。一般的X Server都过于庞大,因此Keith Packard就以XFree86为基础,精简而成Tiny X Server,它的体积可以小到几百KB,非常适合应用于嵌入式环境。就纯X Window System搭配Tiny X Server架构来说,其最大的优点就是具有很好的弹性开发机制,并能大大提高开发速度。因为与桌面的X架构相同,因此相对于很多以Qt、GTK+、FLTK等为基础开发的软件可以很容易地移植过来。7.1 嵌入式GUI简介10
9、 常见GUI参数比较:7.1 嵌入式GUI简介11 7.2.1 Qt/Embedded介绍架构Qt/Embedded以原始Qt为基础,并做了许多出色的调整以适用于嵌入式环境。Qt/Embedded通过Qt API与Linux I/O设施直接交互,成为嵌入式Linux端口。同Qt/X11相比,Qt/Embedded很省内存,因为它不需要一个X服务器或是Xlib库,它在底层抛弃了X lib,采用framebuffer(帧缓冲)作为底层图形接口。同时,将外部输入设备抽象为keyboard和mouse输入事件。Qt/Embedde的应用程序可以直接写内核缓冲帧,这避免开发者使用繁琐的Xlib/Serv
10、er系统。7.2 Qt/Embedded开发入门Qt/Embedded与Qt X11 的linux版本的比较12 7.2.1 Qt/Embedded介绍Qt/Embedded组件窗口系统字体输入设备机输入法Qt的开发环境7.2 Qt/Embedded开发入门13 7.2.1 Qt/Embedded介绍:Qt的开发环境Qt/Embedded的开发环境可以取代那些我们熟知的UNIX和Windows开发工具。它提供了几个跨平台的工具使得开发变得迅速和方便,尤其是它的图形设计器。UNIX下的开发者可以在PC机或者工作站使用虚拟缓冲帧,从而可以模仿一个和嵌入式设备的显示终端大小,像素相同的显示环境。嵌入
11、式设备的应用可以在安装了一个跨平台开发工具链的不同的平台上编译。最通常的做法是在一个UNIX系统上安装跨平台的带有libc库的GNU C+编译器和二进制工具。在开发的许多阶段,一个可替代的做法是使用Qt的桌面版本 7.2 Qt/Embedded开发入门14 7.2.1 Qt/Embedded介绍:Qt的支撑工具qmake是一个为编译Qt/Embedded库和应用而提供的Makefile生成器。它能够根据一个工程文件(.pro)产生不同平台下的Makefile文件。qmake支持跨平台开发和影子生成(影子生成是指当工程的源代码共享给网络上的多台机器时,每台机器编译链接这个工程的代码将在不同的子路
12、径下完成,这样就不会覆盖别人的编译链接生成的文件。qmake还易于在不同的配置之间切换。)designer(Qt图形设计器)可以使开发者可视化地设计对话框而不需编写代码。使用Qt图形设计器的布局管理可以生成能平滑改变尺寸的对话框。7.2 Qt/Embedded开发入门15 7.2.2 Qt/Embedded信号和插槽机制机制概述信号和插槽机制是Qt的核心机制。信号和插槽是一种高级接口,应用于对象之间的通信,它是Qt的核心特性,也是Qt区别于其他工具包的重要地方。信号和插槽是Qt自行定义的一种通信机制,它独立于标准的C/C+语言,因此要正确的处理信号和插槽,必须借助一个称为moc(Meta Ob
13、ject Compiler)的Qt工具,该工具是一个C+预处理程序,它为高层次的事件处理自动生成所需要的附加代码。7.2 Qt/Embedded开发入门16 7.2.2 Qt/Embedded信号和插槽机制机制概述对象间信号与槽之间的关系7.2 Qt/Embedded开发入门17 7.2.2 Qt/Embedded信号和插槽机制信号与插槽的实现Qt的signals关键字指出进入了信号声明区,随后即可声明自己的信号。示例:signals:void mySignal();void mySignal(int x);void mySignalParam(int x,int y);7.2 Qt/Embe
14、dded开发入门18 7.2.2 Qt/Embedded信号和插槽机制信号与插槽的实现插槽是普通的成员函数,因此与其他的函数一样,它们也有存取权限。插槽的存取权限决定了谁能够与其相关联。同普通的C+成员函数一样,插槽函数也分为3种类型,即public slots、private slots和protected slots。public slots:在这个区内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程非常有用,用户可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能够正确地传递。protected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。
15、这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。7.2 Qt/Embedded开发入门19 7.2.2 Qt/Embedded信号和插槽机制信号与插槽的实现插槽也能够被声明为虚函数,这也是非常有用的。插槽的声明也是在头文件中进行的。示例:public slots:void mySlot();void mySlot(int x);void mySignalParam(int x,int y);7.2 Qt/Embedded开发入门20 7.2.2 Qt/Embedded信
16、号和插槽机制信号与槽关联通过调用QObject对象的connect()函数可以将某个对象的信号与另外一个对象的插槽函数或信号相关联,当发射者发射信号时,接收者的槽函数或信号将被调用。函数定义:bool QObject:connect(const QObject*sender,const char*signal,const QObject*receiver,const char*member)static示例:QLabel*label=new QLabel;QScrollBar*scroll=new QScrollBar;QObject:connect(scroll,SIGNAL(valueCh
17、anged(int),label,SLOT(setNum(int);7.2 Qt/Embedded开发入门21 7.2.2 Qt/Embedded信号和插槽机制信号与信号关联class MyWidget:public QWidgetpublic:MyWidget();.signals:void aSignal();.private:.QPushButton*aButton;MyWidget:MyWidget()aButton=new QPushButton(this);connect(aButton,SIGNAL(clicked(),SIGNAL(aSignal();7.2 Qt/Embedd
18、ed开发入门22 7.2.2 Qt/Embedded信号和插槽机制信号与信号关联当信号与槽没有必要继续保持关联时,用户可以使用disconnect()函数来断开连接。bool QObject:disconnect(const QObject*sender,const char*signal,const Object*receiver,const char*member)static有3种情况必须使用disconnect()函数:断开与某个对象相关联的任何对象 断开与某个特定信号的任何关联 断开两个对象之间的关联 7.2 Qt/Embedded开发入门23 7.2.2 Qt/Embedded信号
19、和插槽机制信号与信号关联当信号与槽没有必要继续保持关联时,用户可以使用disconnect()函数来断开连接。bool QObject:disconnect(const QObject*sender,const char*signal,const Object*receiver,const char*member)static有3种情况必须使用disconnect()函数:断开与某个对象相关联的任何对象 断开与某个特定信号的任何关联 断开两个对象之间的关联 7.2 Qt/Embedded开发入门24 7.2.3 搭建Qt/Embedded开发环境安装Qt/X11步骤解压源码包运行配置程序编译Q
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 Qt图形编程 Qt 图形 编程
限制150内