




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章Qt/Embedded嵌入式图形开发目录Qtopia虚拟平台及在S3C2410s开发板上移植本章导读Qt/Embedded嵌入式图形开发基础目录本章导读能力目标:●了解嵌入式图形开发的流程;●了解嵌入式图形开发工具Qt和Qt/Embedded;●了解嵌入式图形开发工具Qt/Embedded;●了解Qt/Embedded的开发环境;●了解Qt设计器及其使用;●了解Qtopia与Qt/Embedded的关系;●了解Qtopia的虚拟平台构建和开发流程。1学习导航:本章是对基于ARM9的图形界面的设计平台Qt的介绍,在文章中系统的介绍了Qt/Embedded和Qtopia的开发环境建立和进行开发的相关概念、基础知识和一般应用的综述,为后续的深入学习提供了知识基础,和理论储备,图9-1所示是Qt/E的图形界面的开发流程。Qt/E的图形界面的开发Qt/E的开发环境的建立主函数和其它文件的编写新建窗口新建工程生成makefile文件编译工程2知识框架:本章知识内容为基于ARM9的Linux嵌入式系统地图形界面的开发的工具、开发环境、信号和插槽的概念以及移植何下载等。Linux嵌入式图形开发工具Qt、Qt/E和QtopiaQt/E和Qtopia的开发环境的创建Tmake工具包Qt设计器和窗口类的应用嵌入式图形开发的程序实例Qt-x11工具包Qt/Embedded工具包3Qt/Embedded嵌入式图形开发基础Qt/E是Tolltech公司的嵌入式产品,它是以工具包的形式提供给开发人员的。Qt是C++语言开发的,最初的Qt主要是为跨平台的软件开发者提供一个统一的图形用户编程接口,以及统一的网络和数据库操作的编程接口。如今Qt已经成为一个支持多操作系统的应用程序开发框架,它为用户提供的工具包中包括了图形设计器、Makfile制作工具、字体国际化工具和Qt的C++类库,以及丰富的API函数。Linux桌面系统KDE就是基于Qt开发的。4Qt/E作为一个专用于嵌入式系统的GUI,它运行时需要的资源少,Qt/Embedded在运行时只需要一个较小的存储空间和内存,Qt/E采用模拟化编程,是可裁剪的,开发人员可以根据应用的需求,将不需要的功能剪裁掉。9.1.1Qt/Embedded概述Qt/E是Qt的嵌入式版本,是专门为嵌入式系统的图形用户界面定制的开发工具包。Qt/E与Qt一样是用C++语言开发的,它继承了C++的优良的框架,为用户提供了基于信号和插槽的组件化编程机制。5Qt/Embedded可以运行在不同的处理器上,只要Linux系统支持该处理器,则Qt/Embedded就可以在编译后正常运行在该处理器上。目前Qt/E支持的处理器有InterX86、MIPS、ARM、M68K和PowerPC等。Qt/E采用面向对象的设计思想,支持多种不同的输入设备,如:键盘、鼠标和图形加速卡等。Qt/E不需要X服务器或Libe库,因此它所消耗的内存不大,通过裁剪和隐式共享的技术,Qt/E能够最大程度的节省内存空间。隐式共享是Qt/E采用的一种节省内存空间的技术,在Qt中有很多类中都采用了该技术。使用该技术可以避免不必要的复制占用内存空间。6Qt/E可以直接写内核缓冲帧,它的工具包中的图形设计器Designer支持可视化的用户接口设计,同时还具有动态布局的功能。图9-3是Qt/Embedded的Linux版本的层次结构图。应用程序QtAPIQt/Embedded帧缓冲Linux内核7Qt/E窗口系统一个Qt/Embedded窗口系统可以包含一个或多个进程,其中的一个进程可以作为服务器进程。服务器进程其主要功能如下:为客户分配显示区域绘制屏幕提供输入方法提供用户接口产生鼠标事件产生键盘事件8Qt/E字体Qt/Embedded嵌入式系统的图形用户界面开发包支持以下4种格式的字体,同时还可以通过增加子类的方式来支持其他字体格式,QT/E中使用的所有字体都采用Unicode方式进行编码。TrueType(TTF):可缩放的矢量显示字体。PostscriptType1(PFA/PFB):可缩放的矢量打印字体。9BitmapDistributionFormatfonts(BDF):不可缩放的位图像素字体,占用的存储空间量大。QtPrerenderedFont(QPF):是QT/E专用的,不可缩放的轻量级字体。在Qt/Embedded开发包中QPF是QT/E专用的始终可用的字体,其余三中字体的开启和关闭是可选的。TTF字体是显示用的,可缩放的矢量字体,使用该格式时,每个指定大小的字符只在第一次显示时被渲染;10BDF字体是位图显示字体,第一次使用该字体时所有字符都会被渲染,TTF、PFA和QPF字体格式都能采用光滑的抗锯齿方式进行渲染;Qt/E输入方法Qt/E开发包对不同的输入法提供了支持接口,对于常用的中文输入法、日文输入法、阿拉伯文输入法和希伯来文输入法,都必须改变键盘的输入编码。11Qt/E开发包中的输入法类QWSInputMethod是一个基类,它定义了一些接口接口来支持不同的输入法程序,它可以处理鼠标和键盘事件,把接收到的键盘事件按照指定的输入法编码规则转换成对应的文字。下面我以中文输入法为例来介绍文字输入的步骤。在键盘上按拼音或五笔按顺序进行按键,在Linux的服务器端监测到键盘和鼠标事件,执行对应的输入法。当继续进行按键时下文处于激活状态,输入法会尝试着去创建与键盘输入相对应的中文字符。12输入完成时,需要用户通过某种方式来确认输入完成的结束字符串,此时,用户所选择的结束字符串将最终被发送到当前的编辑窗口。Qt/Embedded采用面向对象的设计思想,支持多种不同的输入命令。例如,键盘、鼠标、图形加速卡等。Qt/Embedded不需要服务器或者lib库,因此它所消耗的内存不大,通过裁剪和隐藏方式共享技术,Qt/Embedded能够最大程度地节省内存空间。139.1.2创建Qt/Embedded开发环境准备工作在进行Qt/E开发环境的安装前,应先获取相关的安装包。要创建Qt/E的开发环境,我们需要先准备如下的安装包:Tmake安装包:tmake是makefile的生成工具。Qt/Embedded安装包:qt-embedded-2.3.2.tar.bz2是嵌入式开发包。Qt的X11版的安装包:qt-x11-2.3.2.tar.gz是用以产生开发环境所需的工具。14安装tmake在linux的命令行模式下先对文件进行解压,在安装。tar
xfztmake-1.13.tar.gzexportTMAKEDIR=/qt/tmake-1.13exportTMAKEPATH=/qt/tmake-1.13/lib/qws/linux-x86-g/exportPATH=/qt/tmake-1.13/bin/:$PATH15安装Qt/Embedded本书中选用的Qt/Embedded安装包是qt-embedded-linux-opensource-src-3.4.0-rc1.tar.bz2它是一个完整的开发工具,其中包含了基于linux的嵌入式平台开发工具和GUI。下面是qt-embedded-linux的安装步骤:tar
–jxvfqt-embedded-2.3.2.tar.bz2cd
qt-embedded-2.3.2./comfigure-prefix/opt/qte-qt-mouse-linuxup-qvfb16Makemake
install
exportQTDIR
=/opt/qpeexportQTEDIR
=$QTDIRexport
PATH
=/opt/qte/bin:$PATHexportLD_LIBRARY_PATH=opt/qte/lib:$LD_LIBRARY_PATH17安装Qt-X11qt-x11-2.3.2.tar.bz2主要是产生Qt开发工具,如designer和qvfb等,下面是qt-x11-2.3.2.tar.bz2的安装步骤:tar
–jxvfqt-x11-2.3.2.tar.bz2cd
qt-x11-2.3.2./configure
make
18make
install
cd
qt-x11-2.3.2
cd
/tools/qvfb
make
cpbin/qvfb/opt/qte/bin199.1.3Qt设计器简介Qt设计器是用来设计和实现用户界面,并支持多平台下使用的一种可视化的设计工具。Qt设计器中包含了一个代码编辑器,qt窗口等功能的基类,同时还支持信号和插槽机制。使用Qt设计器你可以在编辑器中自己定制插槽的功能代码、操作工具栏、菜单栏等。20信号和插槽信号和插槽是Trolltech创立的一种新机制,主要用于对象间的通信,Qt是完全支持该机制的,所以信号与插槽也被认为是Qt编程的基础。在图形用户界面中常常需要对用户的鼠标和键盘等动作做出响应,在很多时候对于这些事件的响应是通过回调函数来实现的,即事先定义一个函数,并把函数的指针作为参数传递给另外一个这种调用函数,当特定的事件发生时,调用函数通过地址调用回调函数对事件进行处理。而信号和插槽是另一种完全不同的机制,在Qt的编程中它取代了回调函数,同时也避免了由此带来的进程崩溃的问题。21在Qt中信号和插槽是使用C++来实现的。在采用信号和插槽编程的类中,必须对QObject子类进行继承,并在类的定义中加上Q_OBJECT宏。在类中信号signals是不需要实现的,当信号被激活时,执行与该信号连接的插槽函数。插槽函数是需要被实现的函数,它与普通的C++成员函数一样,它可以是虚函数,可以被重载。唯一不同的是插槽适合信号连接的函数,它可以在信号即事件发生后被自动调用。22在应用中,我们可以将信号和插槽随意进行组合,一个信号可以连接到一个或多个插槽
,当一个信号被连接到多个插槽时,当信号发送时,与之连接的插槽将一个一个地被调用。如果是多个信号连接到一个插槽,此时只要与之相连的其中一个信号发送,插槽就会被调用。图9-5是信号和插槽的连接示意图。对象1信号1插槽对象3插槽对象2信号插槽1/223代码编辑器代码编辑器是进行代码编写的地方,使用代码编辑器用户可以在程序中嵌入自定义的插槽和信号。Qt中的信号和插槽是用C++语言编写的,它可以自动生成部分代码,也可以使用编辑器来编写实现的代码。关于程序的编写规则和C++的书写一样,在此不再赘述。24窗口Qt设计器拥有丰富的窗口资源,Qwidget类是所有用户界面对象的基类。窗口是用户界面的一个基本原子,每一个窗口都是矩形,它不仅可以显示绘制图形,还可以从窗口系统中接收鼠标和键盘事件。图9-6是Qwidget的类继承图。25每一个窗口都有一个顶级窗口,QDialog可以作为一个顶级窗口,它是一个没有父窗口的窗口。通常情况下,在一个父窗口会包含框架、标题栏等子窗口。非顶级窗口就是子窗口,它是父窗口中的组成部分。类QWidget是拥有很多成员函数和成员变量的类。它的所有成员可以分为公有成员、私有成员和保护成员几大类,下面将罗列出部分的公有插槽函数。QwidgetQDialogQFrameQLabelQLineEditQSpinBoxQObject26QWidget的成员众多,在使用的时候你可以根据需要为你的窗口添加部件和事件,如:窗口重绘、鼠标按下、鼠标释放和按键相关函数等。paintEvent():窗口重绘函数,当窗口中的部件更新需要重绘时调用该函数。执行该函数将在屏幕上重绘窗口。resizeEvent():是窗口部件大小的函数。mousePressEvent():当鼠标键被按下时被调用该函数,在Qt中有六个与鼠标相关的事件,但鼠标按下和鼠标释放事件是其中最重要的事件。27mouseReleaseEvent():是鼠标键释放事件函数,当窗口部件接收到相应的鼠标释放事件时,调用该函数。mouseDoubleClickEvent():是鼠标键双击事件函数。keyPressEvent():是键按下的事件函数,当键被按下和键被按下时间足够长时可以自动重复该函数就被调用。focusInEvent():当窗口部件获得键盘焦点时调用该函数。focusOutEvent():与focusInEvent()函数不同,它是当窗口部件失去键盘焦点时被调用的。28mouseMoveEvent():是在鼠标键被按下同时鼠标移动时才会被调用,比如用鼠标进行拖动等操作。keyReleaseEvent():当键被释放或这个键是自动重复并且被按下一段时间时被调用,如果Tab和Shift+Tab键被用在焦点变换机制中,它们将仅被传递给窗口部件。为了强迫键释放事件被你的窗口部件处理,你必须重新实现QWidget::event()。wheelEvent():当窗口部件拥有焦点时,只要用户转动鼠标滚轮就调用该函数。29enterEvent():该函数在鼠标进入这个窗口部件屏幕空间时被调用。leaveEvent():是在鼠标离开这个窗口部件的屏幕空间时被调用。moveEvent():是窗口部件相对于它的父窗口部件被移动时调用的。closeEvent():当用户关闭窗口部件时被调用的,该函数也可以在close()函数被调用时调用。309.1.4QtDesigner实例及Qt/E的交叉编译1.新建工程第一步是新建一个工程文件,并手动为其添加头文件和源文件。在这里使用工程文件而不是创建一个单独的ui文件的好处是,使用工程文件你可以将所有的图像存储到一个单一的文件中,而且可以通过鼠标点击来加载窗口。点击“file->new”进入如图9-7所示的新文件对话框,选择“C++Project”单击OK。这时你就可以为你的工程文件命名,并制定保存位置。31322.新建窗口在QtDesigner中,单击菜单项“new”,将弹出一个“newForm”对话框,在弹出的这个对话框中选择“widget”并单击“OK”了,新建一个窗口。完成窗口的新建工作后,接下来就是修改窗口的属性,在name属性栏中填入“hello”,设置窗口名;设置窗口尺寸确保窗口的大小与目标板上的显示屏大小一致,在此我们设置其窗口尺寸为240*320。333.填写显示文本双击“textlabel”在里面填写要显示的文本信息,单击“OK”,将你的工程保存到指定的文件夹里,最好选择和你的工程名一致的文件夹,此时QtDesigner以为你生成了一个hello.ui文件。4.生成hello.h头文件和hello.cpp现在我们可以通过uic命令来生成hello.h头文件和hello.cpp实现文件。34命令“uic-ohello.hhello.ui”是生成头文件,而“uic-ohello.cppimplhello.hhello.ui”是生成与hello.h对应的hello.cpp文件。执行完成就得到了Hello窗体的头文件hello.h和实现文件hello.cpp,接下来就可以为其添加相应的代码了。uic-ohello.hhello.uiuic-ohello.cppimplhello.hhello.ui355.编写main函数一个Qt/Embedded应用程序中应该包含一个main主函数,使用编辑器vi或emacs先新建一个main.cpp文件,并为其填写如下代码。#include"hello.h"#include<qapplication.h>/*Main.cpp是主函数,程序从此开始执行*/intmain(intargc,char*argv[]){QApplicationap(argc,argv);/*
生成一个hello的变量*/hellodlp;ap.setMainWidget(&dlp);dlp.show();returnap.exec();}366.编辑完成文件的编写后,接下来进行的编辑了。前面介绍的三个文件hello.h、hello.cpp和main.cpp都应该被包含在工程文件.pro内。HEADERS=hello.hSOURCES=hello.cpp\Main.cppINTERFACES
=
TARGET
=hello377.生成makefile文件在Qt中编辑器同样是根据makefile文件的内容来进行编译的,在Qt中生成makefile文件可以使用tmake或者qmake。其中qmake用于本地编译,tmake则既可以生成本地的makefile,也可以生成用于交叉编译的makefile,二者的区别在于TMAKEPATH路径的不同,一个是用于x86,另一个是用于arm或其他的处理器。8.编译工程直接执行make命令对整个工程进行编译链接,生成一个二进制的可执行文件hello,将这个文件发布到目标板上就完成了。38Qtopia虚拟平台及在S3C2410s开发板上移植Qtopia是Trolltech公司开发的,用于采用嵌入式Linux操作系统的消费类电子设备中。他是一个综合的应用平台,包含有完整的应用程序、用户界面、窗口操作系统以及开发框架等。Qtopia是基于Qt/E开发的,是带桌面的系统嵌入式图形开发工具。常用于PDA、手机等电子产品中。Qtopia是带桌面的嵌入式Qt,而Qt/E是Qt的嵌入式开发工具。Trolltech所提供的Qtopia有三大版本,分别是Qtopia手机版、QtopiaPDA版和Qtopia消费电子产品平台。399.2.1构建本机Qtopia虚拟平台建立本机的Qtopia虚拟平台,需要先准备qtopia的环境qtopia-free-source-2.1.1.tar.bz2、e2fsprogs-1.39、tmake、qt-embedded和qt-x11。安装e2fsprogs-1.39e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园资产物品管理制度
- 幼儿园饮水设备管理制度
- 应急消防通道设备管理制度
- 弃土消纳场公司管理制度
- 律师事务所印章管理制度
- 德国游戏公司日常管理制度
- 房地产公司员工饭堂管理制度
- 拆迁评估公司工作日常管理制度
- 教研实验室仪器设备管理制度
- 易货公司服装库存管理制度
- 以案说纪 违反“六大纪律”案例
- 计量投诉处理管理制度
- 神经外科护士进修汇报
- 陪诊师考试知识点提炼与答案解析
- 产后护理档案表
- 乙酸钠合同范例
- 2025年日历表全年(打印版)完整清新每月一张
- 《污染地块风险管控与修复工程职业健康防控指南》
- 2025年山西焦煤集团公司招聘笔试参考题库含答案解析
- 主播形体礼仪培训
- 开曼群岛公司法2024版中文译本(含2024年修订主要内容)
评论
0/150
提交评论