《基于ARM9的嵌入式Linux系统开发原理与实践》课件第13章_第1页
《基于ARM9的嵌入式Linux系统开发原理与实践》课件第13章_第2页
《基于ARM9的嵌入式Linux系统开发原理与实践》课件第13章_第3页
《基于ARM9的嵌入式Linux系统开发原理与实践》课件第13章_第4页
《基于ARM9的嵌入式Linux系统开发原理与实践》课件第13章_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

第13章Qt图形应用程序设计13.1图形用户界面系统(GUI)13.2Qt和Qt/Embedded简介13.3Qt/Embedded体系结构13.4Qt编程入门13.5Qt和Qt/E开发环境的建立和移植本章小结

13.1图形用户界面系统(GUI)

图形用户界面系统(GUI)是系统级的底层软件,它可以和文件系统、操作系统内核等一起构成一个完整的操作系统。GUI为用户提供了与应用系统交互的可视化通道,同时GUI为程序员提供了一种编程模式,即GUI负责系统的可视化界面的生成、管理以及系统与用户之间的信息交互,而程序员只需专注于对实际应用的分析。

13.2Qt和Qt/Embedded简介

Qt就是基于C++语言的一种专门用来开发GUI界面的程序,它里面包括了:button、label、frame…等很多的可以直接调用的东西。

1. Qt是基于C++ 的一种语言

Qt可以被称作是一种C++ 的延伸。Qt中有数百个类(class)都是用C++ 写出来的,这也就是说,Qt本身就具备了C++ 的快速、简易、面向对象编程(Object-OrientedProgramming)等优点。

2. Qt具有非常好的可移植性

Qt不只是可以在Linux中运作,也同样可以运行在MicrosoftWindows中。这也就意味着,利用Qt编写出来的程序,在几乎不用修改的情况下,就可以同时在Linux和MicrosoftWindows中运行。Qt的应用非常广泛,从Linux到Windows,从x86到Embedded都有Qt的影子。

13.3Qt/Embedded体系结构

13.3.1交叉开发平台

Qt是用于本地化跨平台应用开发的领先性框架。Qt所有平台的API是一致的。这就意味着在一种平台上写的应用程序,在新的平台上经过重新编译和连接便能运行于该新平台上。因此,软件开发者通过开发和维护一种平台的应用源码来用于多种平台的开发。同样,嵌入式Qt也可以移植基于Qt的软件到嵌入式Linux中。Qt可提供的平台如图13-1所示。图13-1Qt可提供的平台13.3.2Qt/E的窗口系统

Qt/E的窗口系统采用一种客户/服务器体系结构。如图13-2所示。一个典型的嵌入式Qt窗口系统一般包括一个服务器进程、一个或多个客户进程(简称服务器和客户)。服务器负责为客户和其本身分配显示区域、生成鼠标和键盘事件。客户则通过与服务器通信来申请显示区域、接收鼠标和键盘事件。客户可以直接访问所分配的显示区域,以便为用户提供GUI服务。服务器和客户通过共享内存的方式来传递所有分配显示区域上的信息。图13-2Qt/E的窗口系统的客户/服务器体系结构13.3.3Qt/E图形引擎的实现

Qt/E的底层图形引擎基于帧缓冲(framebuffer)。帧缓冲是标准显示设备驱动接口,使用MMAP系统将帧缓存映射到应用程序虚拟内存空间,这样应用程序可以访问它。图13-3信号与槽的连接

13.4Qt编程入门

13.4.1Qt编程实例

下面主要以Red

Hat

9.0中的Qt

Designer为例来讲述Qt程序的设计过程。如果在安装Red

Hat

9.0时没有完全安装,则Qt

Designer在默认情况下是没有被安装的,用户可以从主菜单→系统设置→添加/删除应用程序中选择KDE软件开发,完成Qt

Designer的安装(如图13-4所示)。

图13-4安装QtDesigner图13-5New/Open对话框图13-6保存文件图13-7QtDesigner主窗口图13-8创建一个新的表单图13-9更改表单的属性图13-10基本完成的GUI图13-11加法程序界面效果图图13-12为Quit按钮创建关联图13-13创建新的栏目图13-14完成连接创建图13-15创建Add()函数图13-16创建Add()函数代码图13-17生成Makefile文件图13-18测试程序结果13.4.2代码解释

下面写一个简单的HelloWorld例子来解释一下Qt应用程序的运行原理,读者可对照上面的实例中所自动生成的main.cpp(原代码如图13-19所示)来理解上面程序的运行原理。图13-19main.cpp代码

13.5Qt和Qt/E开发环境的建立和移植

13.5.1Qt2和Qt2/E开发环境的建立

本开发环境所要的软件如下:

tmake-1.13.tar.gz

qt-embedded-2.3.10-free.tar.gz

qt-x11-2.3.2.tar.gz

把这三个文件通过与Windows下文件共享将其拷贝到/home/mxl/dishisanzhang/train-2410-S-qte目录中,如图13-20所示。图13-20拷贝源文件

1. Qt开发环境的搭建

1)解压安装包并设置环境变量

2)编译Qt2.3.2

图13-21编译Qt2.3.2成功后的界面

3)编译Qvfb

图13-22编译Qvfb成功后的界面

2. Qt2/E开发环境的搭建

1)编译Qt2/Embedded

图13-23编译Qt2/Embedded成功后的界面

2)查看运行结果

如果上面各步都能够成功的编译通过,下面就可以通过运行Qt2/Embedded自带的demo程序来查看运行结果。图13-24执行demo程序图13-25执行launcher程序

3)交叉编译Qt2/E

要将写好的程序发布到开发板上,需要对Qt/Embedded重新编译,与前面在宿主机上编译类似,步骤如下:图13-26交叉编译Qt2/E结束后的界面图13-27测试库文件13.5.2Qt2/E程序在博创2410开发板上的移植

1.修改tmake配置文件

[root@localhostlib]#cdTMAKEDIR/lib/qws/linux-arm-g++

[root@localhostlinux-arm-g++]#vi$TMAKEDIR/

lib/qws/linux-arm-g++/tmake.conf

2.生成可执行文件

[root@localhostlinux-arm-g++]#cd$QTEDIR/examples

/progressbar

[root@localhostprogressbar]#ls

[root@localhostprogressbar]#makeclean

[root@localhostprogressbar]#progen–tapp.t–o图13-28查看progressbar可执行程序

3.将相关的库文件复制到根文件系统的lib目录下

1) QT2/E必要的库文件

将 /$QTEDIR/lib/(即/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib)目录下面libqte.so、libqte.so.2、libqte.so.2.3、libqte.so.2.3.10四个文件复制到根文件系统lib目录下,即

[root@localhostprogressbar]#

/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib/libqte.so*

/home/mxl/dishisanzhang/root/built_rootfs/lib

2)交叉编译器库文件

需要复制编译器(本章用的3.4.1版本)中/usr/local/arm/3.4.1

/arm-linux/lib中的某些库文件到根文件系统的lib中,最简单的办法是全部复制过去,即

[root@localhostprogressbar]#/usr/local/arm/3.4.1/arm-linux/lib/*

/home/mxl/dishisanzhang/root/built_rootfs/lib

3) QT2/E字库文件

Qt2/E字库放在lib/fonts中,将Qt2/E字库文件复制到根文件系统的lib中,即

[root@localhostprogressbar]#

/home/mxl/dishisanzhang/train-2410-S-qte/qt-2.3.10-target/lib/fonts/*

/home/mxl/dishisanzhang/root/built_rootfs/lib

4.重新制作可写根文件系统

1)把tmp目录制作为ramfs文件系统

(1)编译BusyBox。配置BusyBox及编译方法和第9章内容一样。

(2)创建linuxrc文件。linuxrc文件放在根目录下,linuxrc文件内容:

#!/bin/sh

echo“mount/tmpasramfs”

/bin/mount-tramfsramfs/tmp

exec/sbin/init

(3)创建inittab文件。inittab文件是init的初始化配置文件,是系统启动后第一个访问的脚本文件,后续的启动文件是由它指定的。

inittab文件放在根目录etc目录下,inittab文件内容:

::askfirst:-/bin/sh

::sysinit:/etc/init.d/rcS

(4)创建/etc/init.d文件夹和rcS文件。/etc/init.d/rcS是BusyBox中系统启动时默认的配置脚本。需要启动的进程和需要进行的设置可以放到这个文件里面,并在其中加入必要的初始化工作。

在rcS中添加:

#!/bin/sh

echo“StartingSystem”

hostnameuptech-s3c2410

/bin/mount-a

/bin/mount-tprocproc/proc

/sbin/ifconfigeth0

(5)创建fstab文件。fstab文件是mount文件系统的配置文件。它指定了系统挂载块设备和目录的关系,需要和实际的系统相配合。inittab文件放在根目录etc目录下,fstab文件内容:

none/tmpramfsdefaults00

(6)创建profile文件。这个文件主要是为系统添加环境变量。

inittab文件放在根目录etc目录下,profile文件内容:

(7) cramfs文件系统映像的制作。cramfs文件系统映像的制作和第9章内容一样。

(8)下载cramfs根文件系统映像到开发板。下载cramfs根文件系统映像到开发板和第9章内容一样。

这里要注意的是,因为Qt的库较大,所以根文件系统占用Flash的空间较大,第7章对Flash的分区将不合适,要重新分区,将存放根文件系统的区间分为24MB大小。分区命令如下:

vivi>bonpart0128k192k2240k26816k:m65536k回车图13-29重新分区后的Flash分区信息图13-30新制作的cramfs根文件系统启动结果

(9)测试新制作的cramfs根文件系统。为了测试tmp目录是不是ramfs文件系统,可进入 /tmp目录,创建新的目录是否成功,若能创建,且系统重启后 /tmp目录新创建的目录将不存在,则可证明tmp目录是ramfs文件系统。具体过程如下:

/#cdtmp

/tmp#mkdirmxl

/tmp#ls图13-31/tmp是否是ramfs文件系统

2)制作yaffs2根文件系统

因为2.6.14内核配置菜单里没有yaffs2文件系统选项,如果要让内核支持yaffs2文件系统功能,则需要添加如下三方面的内容:

(1) MTD分区的支持。

(2)给linux-2.6.14内核打补丁(添加YAFFS2选项)。下载yaffs2.tar.gz源码包,解压源码,并进入目录执行:

#./patch-ker.sh/linux-/

(3)添加devfs。

5.测试Qt2/E程序(采用tmp目录制作为ramfs文件系统的方法)

当系统启动进入根文件系统后,进入progressbar所在的目录中:

/#cd/mnt

执行:

/mnt#ln–sf/dev/fb/0/dev/fb0

进行文件的连接;如果不连接,会出现如下提示信息:

can’topenframebufferdevice/dev/fb0

can’topenframebufferdevice/dev/fb0

drivercannotconnect

执行:

/mnt#exportQTDIR=进行Qt目录环境变量的设置;如果不连接,会出现如下提示信息:

Cannotfindfontdefinitionfile/usr/local/qt-embedded/lib/fonts/fontdir-is$QTDIRsetcorrectly?

最后执行progressbar程序:

/mnt#./progr

温馨提示

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

评论

0/150

提交评论