基于Qt/Embedded和Qtopia的GUI设计
王丽洁,习勇,魏急波
(国防科技大学 电子科学与工程学院 湖南省 长沙市 410073)
摘要:介绍了Qt/Embedded和Qtopia的体系结构及其交叉编译过程与安装过程,重点讲述了如何实现Qt/Embedded下的应用程序以及如何将应用程序移植到Qtopia桌面系统。本文介绍的方法在笔者的开发平台上都做过验证。
关键词:嵌入式系统; GUI;Qt/Embedded; Qtopia; 交叉编译
中图分类号:TP368
Design of GUI Based on Qt/Embedded and Qtopia
Wang Li-Jie, Xi Yong, Wei Ji-Bo
(School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China)
Abstract: In this paper, the architecture, cross-compiling and installation of Qt/Embedded and Qtopia are introduced. Especially, we focus on how to implement an application program based on Qt/Embedded and how to port an existing application to Qtopia desktop system. The methods introduced in the paper have all been validated in our development platform.
Key words: Embedded System; GUI; Qt/Embedded; Qtopia; Cross-Compiling
1 引言
随着当前各种手持设备、无线设备及信息家电等嵌入式产品的迅猛发展,相应的嵌入式软硬件设计技术也在发生深刻的变化。如今,越来越多的嵌入式终端需要一个图形化的人机接口界面(GUI),良好的人机接口界面是嵌入式系统设计的一个关键技术,能够极大地提高人机交互的效率。本文详细阐述了在自行开发的嵌入式主板上实现某平台的图形显示终端过程。
2系统平台介绍
根据系统设计需求,本文目的是实现一个具有图形接口界面的嵌入式显示终端,该系统使用嵌入式系统设计技术。硬件上,使用自行开发的基于Samsung S3C2440A CPU的目标板,该CPU使用arm920T内核,其主频可达400Mhz;在软件上,选择嵌入式linux为操作系统,因为它源码开放,而且稳定性与安全性较高。
整个系统软件由引导装载程序(uboot)、 设备驱动(包括帧缓存fb)、嵌入式Linux内核、文件系统(yaffs)、基于QT/Embedded和Qtopia的用户图形界面以及应用程序组成,系统平台结构如图(1)所示。
图(1) 系统平台软件结构图
3 Qt/Embedded和Qtopia 介绍及其开发环境的建立
目前嵌入式Linux的主流GUI系统主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同[1]。MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底层的图形引擎,窗口系统和图形接口方面功能比较欠缺,与Win32和X Windows窗口系统保持兼容,提供了相对完善的图形功能。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。
Qt/Embedded是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发[2,3]。现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中,从消费电器(如智能手机、机顶盒)到工业控制设备(如医学成像设备、移动信息系统等)。因此本文选择Qt/Embedded为本系统的GUI。
(1) Qt/Embedded和Qtopia体系结构
Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded的实现结构如图(2)所示:
图(2) Qt/Embedded实现结构
Qt/Embedded的底层图形引擎基于framebuffer。 framebuffer是一种驱动程序接口,它将显示设备抽象为帧缓冲区[4]。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。对用户而言,它和/dev下的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以从这块内存中读取数据,也可以向其中写入数据,而写操作立即反应在屏幕上。为运行Qt/Embedded,嵌入式Linux内核要支持framebuffer。
Qt/Embedded是Qt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded。
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
(2) Qt/Embedded和Qtopia的交叉编译与运行
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
l tmake:跨平台的Makefile生成器。
l moc:用于Qt C++扩展的metra-object编译器。
l uic:从XML文件生成代码的用户界面编译器。
l designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:
l qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。
l qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]。
由于我们使用的是ARM CPU,因此需要对Qt/Embedded和Qtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/Embedded和Qtopia进行交叉编译,需要使用如下的源码树:
l tmake-1.13.tar.gz:用来得到tmake工具。
l qt-embedded-2.3.7.tar.gz:Qt的嵌入式版本。
l qt-x11-2.3.2.tar.gz:Qt的X11版本。
l qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。
l e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。
假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:
①设定tmake的环境变量如下:
export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++
此处指定了tmake在生成Makefile时使用arm交叉编译。
②编译qt-x11,其目的是生成moc、uic、qvfb、designer,并将它们放在qt-embedded/bin目录下。
③配置qt-embedded编译选项,命令为:
./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 4,8,16,32.
此处-platform linux-arm-g++表示在arm平台上进行交叉编译;-qconfig local表示使用src/tools/qconfig-local.h;-depths 4,8,16,32表示需要qt支持的显示颜色深度。
④使用make命令编译qt-embedded,用来生成Qt库(libqte.so)。
⑤配置并交叉编译Qtopia,生成应用程序以及桌面环境。
假设编译完成后将qt和qtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt和/opt/qtopia下,运行Qtopia的方法是:
①设置QTDIR、QPEDIR和键盘鼠标等环境变量
export QTDIR=/opt/qt
export QPEDIR=/opt/qtopia
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=USB:/dev/input/mouse0
②开启qpe,也就是在Linux图形模式下执行/opt/qtopia/bin/qpe &
这样就可以在显示终端上看到qtopia桌面环境了。
4 Qt/Embedded和Qtopia下应用程序的实现
基于Qt/Embedded和Qtopia的GUI设计
王丽洁,习勇,魏急波
(国防科技大学 电子科学与工程学院 湖南省 长沙市 410073)
摘要:介绍了Qt/Embedded和Qtopia的体系结构及其交叉编译过程与安装过程,重点讲述了如何实现Qt/Embedded下的应用程序以及如何将应用程序移植到Qtopia桌面系统。本文介绍的方法在笔者的开发平台上都做过验证。
关键词:嵌入式系统; GUI;Qt/Embedded; Qtopia; 交叉编译
中图分类号:TP368
Design of GUI Based on Qt/Embedded and Qtopia
Wang Li-Jie, Xi Yong, Wei Ji-Bo
(School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China)
Abstract: In this paper, the architecture, cross-compiling and installation of Qt/Embedded and Qtopia are introduced. Especially, we focus on how to implement an application program based on Qt/Embedded and how to port an existing application to Qtopia desktop system. The methods introduced in the paper have all been validated in our development platform.
Key words: Embedded System; GUI; Qt/Embedded; Qtopia; Cross-Compiling
1 引言
随着当前各种手持设备、无线设备及信息家电等嵌入式产品的迅猛发展,相应的嵌入式软硬件设计技术也在发生深刻的变化。如今,越来越多的嵌入式终端需要一个图形化的人机接口界面(GUI),良好的人机接口界面是嵌入式系统设计的一个关键技术,能够极大地提高人机交互的效率。本文详细阐述了在自行开发的嵌入式主板上实现某平台的图形显示终端过程。
2系统平台介绍
根据系统设计需求,本文目的是实现一个具有图形接口界面的嵌入式显示终端,该系统使用嵌入式系统设计技术。硬件上,使用自行开发的基于Samsung S3C2440A CPU的目标板,该CPU使用arm920T内核,其主频可达400Mhz;在软件上,选择嵌入式linux为操作系统,因为它源码开放,而且稳定性与安全性较高。
整个系统软件由引导装载程序(uboot)、 设备驱动(包括帧缓存fb)、嵌入式Linux内核、文件系统(yaffs)、基于QT/Embedded和Qtopia的用户图形界面以及应用程序组成,系统平台结构如图(1)所示。
图(1) 系统平台软件结构图
3 Qt/Embedded和Qtopia 介绍及其开发环境的建立
目前嵌入式Linux的主流GUI系统主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同[1]。MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底层的图形引擎,窗口系统和图形接口方面功能比较欠缺,与Win32和X Windows窗口系统保持兼容,提供了相对完善的图形功能。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。
Qt/Embedded是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发[2,3]。现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中,从消费电器(如智能手机、机顶盒)到工业控制设备(如医学成像设备、移动信息系统等)。因此本文选择Qt/Embedded为本系统的GUI。
(1) Qt/Embedded和Qtopia体系结构
Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded的实现结构如图(2)所示:
图(2) Qt/Embedded实现结构
Qt/Embedded的底层图形引擎基于framebuffer。 framebuffer是一种驱动程序接口,它将显示设备抽象为帧缓冲区[4]。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。对用户而言,它和/dev下的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以从这块内存中读取数据,也可以向其中写入数据,而写操作立即反应在屏幕上。为运行Qt/Embedded,嵌入式Linux内核要支持framebuffer。
Qt/Embedded是Qt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded。
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
(2) Qt/Embedded和Qtopia的交叉编译与运行
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
l tmake:跨平台的Makefile生成器。
l moc:用于Qt C++扩展的metra-object编译器。
l uic:从XML文件生成代码的用户界面编译器。
l designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:
l qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。
l qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]。
由于我们使用的是ARM CPU,因此需要对Qt/Embedded和Qtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/Embedded和Qtopia进行交叉编译,需要使用如下的源码树:
l tmake-1.13.tar.gz:用来得到tmake工具。
l qt-embedded-2.3.7.tar.gz:Qt的嵌入式版本。
l qt-x11-2.3.2.tar.gz:Qt的X11版本。
l qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。
l e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。
假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:
①设定tmake的环境变量如下:
export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++
此处指定了tmake在生成Makefile时使用arm交叉编译。
②编译qt-x11,其目的是生成moc、uic、qvfb、designer,并将它们放在qt-embedded/bin目录下。
③配置qt-embedded编译选项,命令为:
./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 4,8,16,32.
此处-platform linux-arm-g++表示在arm平台上进行交叉编译;-qconfig local表示使用src/tools/qconfig-local.h;-depths 4,8,16,32表示需要qt支持的显示颜色深度。
④使用make命令编译qt-embedded,用来生成Qt库(libqte.so)。
⑤配置并交叉编译Qtopia,生成应用程序以及桌面环境。
假设编译完成后将qt和qtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt和/opt/qtopia下,运行Qtopia的方法是:
①设置QTDIR、QPEDIR和键盘鼠标等环境变量
export QTDIR=/opt/qt
export QPEDIR=/opt/qtopia
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=USB:/dev/input/mouse0
②开启qpe,也就是在Linux图形模式下执行/opt/qtopia/bin/qpe &
这样就可以在显示终端上看到qtopia桌面环境了。
4 Qt/Embedded和Qtopia下应用程序的实现
基于Qt/Embedded和Qtopia的GUI设计
王丽洁,习勇,魏急波
(国防科技大学 电子科学与工程学院 湖南省 长沙市 410073)
摘要:介绍了Qt/Embedded和Qtopia的体系结构及其交叉编译过程与安装过程,重点讲述了如何实现Qt/Embedded下的应用程序以及如何将应用程序移植到Qtopia桌面系统。本文介绍的方法在笔者的开发平台上都做过验证。
关键词:嵌入式系统; GUI;Qt/Embedded; Qtopia; 交叉编译
中图分类号:TP368
Design of GUI Based on Qt/Embedded and Qtopia
Wang Li-Jie, Xi Yong, Wei Ji-Bo
(School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China)
Abstract: In this paper, the architecture, cross-compiling and installation of Qt/Embedded and Qtopia are introduced. Especially, we focus on how to implement an application program based on Qt/Embedded and how to port an existing application to Qtopia desktop system. The methods introduced in the paper have all been validated in our development platform.
Key words: Embedded System; GUI; Qt/Embedded; Qtopia; Cross-Compiling
1 引言
随着当前各种手持设备、无线设备及信息家电等嵌入式产品的迅猛发展,相应的嵌入式软硬件设计技术也在发生深刻的变化。如今,越来越多的嵌入式终端需要一个图形化的人机接口界面(GUI),良好的人机接口界面是嵌入式系统设计的一个关键技术,能够极大地提高人机交互的效率。本文详细阐述了在自行开发的嵌入式主板上实现某平台的图形显示终端过程。
2系统平台介绍
根据系统设计需求,本文目的是实现一个具有图形接口界面的嵌入式显示终端,该系统使用嵌入式系统设计技术。硬件上,使用自行开发的基于Samsung S3C2440A CPU的目标板,该CPU使用arm920T内核,其主频可达400Mhz;在软件上,选择嵌入式linux为操作系统,因为它源码开放,而且稳定性与安全性较高。
整个系统软件由引导装载程序(uboot)、 设备驱动(包括帧缓存fb)、嵌入式Linux内核、文件系统(yaffs)、基于QT/Embedded和Qtopia的用户图形界面以及应用程序组成,系统平台结构如图(1)所示。
图(1) 系统平台软件结构图
3 Qt/Embedded和Qtopia 介绍及其开发环境的建立
目前嵌入式Linux的主流GUI系统主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同[1]。MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底层的图形引擎,窗口系统和图形接口方面功能比较欠缺,与Win32和X Windows窗口系统保持兼容,提供了相对完善的图形功能。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。
Qt/Embedded是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发[2,3]。现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中,从消费电器(如智能手机、机顶盒)到工业控制设备(如医学成像设备、移动信息系统等)。因此本文选择Qt/Embedded为本系统的GUI。
(1) Qt/Embedded和Qtopia体系结构
Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded的实现结构如图(2)所示:
图(2) Qt/Embedded实现结构
Qt/Embedded的底层图形引擎基于framebuffer。 framebuffer是一种驱动程序接口,它将显示设备抽象为帧缓冲区[4]。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。对用户而言,它和/dev下的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以从这块内存中读取数据,也可以向其中写入数据,而写操作立即反应在屏幕上。为运行Qt/Embedded,嵌入式Linux内核要支持framebuffer。
Qt/Embedded是Qt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded。
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
(2) Qt/Embedded和Qtopia的交叉编译与运行
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
l tmake:跨平台的Makefile生成器。
l moc:用于Qt C++扩展的metra-object编译器。
l uic:从XML文件生成代码的用户界面编译器。
l designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:
l qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。
l qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]。
由于我们使用的是ARM CPU,因此需要对Qt/Embedded和Qtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/Embedded和Qtopia进行交叉编译,需要使用如下的源码树:
l tmake-1.13.tar.gz:用来得到tmake工具。
l qt-embedded-2.3.7.tar.gz:Qt的嵌入式版本。
l qt-x11-2.3.2.tar.gz:Qt的X11版本。
l qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。
l e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。
假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:
①设定tmake的环境变量如下:
export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++
此处指定了tmake在生成Makefile时使用arm交叉编译。
②编译qt-x11,其目的是生成moc、uic、qvfb、designer,并将它们放在qt-embedded/bin目录下。
③配置qt-embedded编译选项,命令为:
./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 4,8,16,32.
此处-platform linux-arm-g++表示在arm平台上进行交叉编译;-qconfig local表示使用src/tools/qconfig-local.h;-depths 4,8,16,32表示需要qt支持的显示颜色深度。
④使用make命令编译qt-embedded,用来生成Qt库(libqte.so)。
⑤配置并交叉编译Qtopia,生成应用程序以及桌面环境。
假设编译完成后将qt和qtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt和/opt/qtopia下,运行Qtopia的方法是:
①设置QTDIR、QPEDIR和键盘鼠标等环境变量
export QTDIR=/opt/qt
export QPEDIR=/opt/qtopia
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=USB:/dev/input/mouse0
②开启qpe,也就是在Linux图形模式下执行/opt/qtopia/bin/qpe &
这样就可以在显示终端上看到qtopia桌面环境了。
4 Qt/Embedded和Qtopia下应用程序的实现
基于Qt/Embedded和Qtopia的GUI设计
王丽洁,习勇,魏急波
(国防科技大学 电子科学与工程学院 湖南省 长沙市 410073)
摘要:介绍了Qt/Embedded和Qtopia的体系结构及其交叉编译过程与安装过程,重点讲述了如何实现Qt/Embedded下的应用程序以及如何将应用程序移植到Qtopia桌面系统。本文介绍的方法在笔者的开发平台上都做过验证。
关键词:嵌入式系统; GUI;Qt/Embedded; Qtopia; 交叉编译
中图分类号:TP368
Design of GUI Based on Qt/Embedded and Qtopia
Wang Li-Jie, Xi Yong, Wei Ji-Bo
(School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China)
Abstract: In this paper, the architecture, cross-compiling and installation of Qt/Embedded and Qtopia are introduced. Especially, we focus on how to implement an application program based on Qt/Embedded and how to port an existing application to Qtopia desktop system. The methods introduced in the paper have all been validated in our development platform.
Key words: Embedded System; GUI; Qt/Embedded; Qtopia; Cross-Compiling
1 引言
随着当前各种手持设备、无线设备及信息家电等嵌入式产品的迅猛发展,相应的嵌入式软硬件设计技术也在发生深刻的变化。如今,越来越多的嵌入式终端需要一个图形化的人机接口界面(GUI),良好的人机接口界面是嵌入式系统设计的一个关键技术,能够极大地提高人机交互的效率。本文详细阐述了在自行开发的嵌入式主板上实现某平台的图形显示终端过程。
2系统平台介绍
根据系统设计需求,本文目的是实现一个具有图形接口界面的嵌入式显示终端,该系统使用嵌入式系统设计技术。硬件上,使用自行开发的基于Samsung S3C2440A CPU的目标板,该CPU使用arm920T内核,其主频可达400Mhz;在软件上,选择嵌入式linux为操作系统,因为它源码开放,而且稳定性与安全性较高。
整个系统软件由引导装载程序(uboot)、 设备驱动(包括帧缓存fb)、嵌入式Linux内核、文件系统(yaffs)、基于QT/Embedded和Qtopia的用户图形界面以及应用程序组成,系统平台结构如图(1)所示。
图(1) 系统平台软件结构图
3 Qt/Embedded和Qtopia 介绍及其开发环境的建立
目前嵌入式Linux的主流GUI系统主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同[1]。MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底层的图形引擎,窗口系统和图形接口方面功能比较欠缺,与Win32和X Windows窗口系统保持兼容,提供了相对完善的图形功能。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。
Qt/Embedded是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发[2,3]。现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中,从消费电器(如智能手机、机顶盒)到工业控制设备(如医学成像设备、移动信息系统等)。因此本文选择Qt/Embedded为本系统的GUI。
(1) Qt/Embedded和Qtopia体系结构
Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded的实现结构如图(2)所示:
图(2) Qt/Embedded实现结构
Qt/Embedded的底层图形引擎基于framebuffer。 framebuffer是一种驱动程序接口,它将显示设备抽象为帧缓冲区[4]。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。对用户而言,它和/dev下的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以从这块内存中读取数据,也可以向其中写入数据,而写操作立即反应在屏幕上。为运行Qt/Embedded,嵌入式Linux内核要支持framebuffer。
Qt/Embedded是Qt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded。
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
(2) Qt/Embedded和Qtopia的交叉编译与运行
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
l tmake:跨平台的Makefile生成器。
l moc:用于Qt C++扩展的metra-object编译器。
l uic:从XML文件生成代码的用户界面编译器。
l designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:
l qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。
l qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]。
由于我们使用的是ARM CPU,因此需要对Qt/Embedded和Qtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/Embedded和Qtopia进行交叉编译,需要使用如下的源码树:
l tmake-1.13.tar.gz:用来得到tmake工具。
l qt-embedded-2.3.7.tar.gz:Qt的嵌入式版本。
l qt-x11-2.3.2.tar.gz:Qt的X11版本。
l qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。
l e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。
假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:
①设定tmake的环境变量如下:
export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++
此处指定了tmake在生成Makefile时使用arm交叉编译。
②编译qt-x11,其目的是生成moc、uic、qvfb、designer,并将它们放在qt-embedded/bin目录下。
③配置qt-embedded编译选项,命令为:
./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 4,8,16,32.
此处-platform linux-arm-g++表示在arm平台上进行交叉编译;-qconfig local表示使用src/tools/qconfig-local.h;-depths 4,8,16,32表示需要qt支持的显示颜色深度。
④使用make命令编译qt-embedded,用来生成Qt库(libqte.so)。
⑤配置并交叉编译Qtopia,生成应用程序以及桌面环境。
假设编译完成后将qt和qtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt和/opt/qtopia下,运行Qtopia的方法是:
①设置QTDIR、QPEDIR和键盘鼠标等环境变量
export QTDIR=/opt/qt
export QPEDIR=/opt/qtopia
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=USB:/dev/input/mouse0
②开启qpe,也就是在Linux图形模式下执行/opt/qtopia/bin/qpe &
这样就可以在显示终端上看到qtopia桌面环境了。
4 Qt/Embedded和Qtopia下应用程序的实现
基于Qt/Embedded和Qtopia的GUI设计
王丽洁,习勇,魏急波
(国防科技大学 电子科学与工程学院 湖南省 长沙市 410073)
摘要:介绍了Qt/Embedded和Qtopia的体系结构及其交叉编译过程与安装过程,重点讲述了如何实现Qt/Embedded下的应用程序以及如何将应用程序移植到Qtopia桌面系统。本文介绍的方法在笔者的开发平台上都做过验证。
关键词:嵌入式系统; GUI;Qt/Embedded; Qtopia; 交叉编译
中图分类号:TP368
Design of GUI Based on Qt/Embedded and Qtopia
Wang Li-Jie, Xi Yong, Wei Ji-Bo
(School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China)
Abstract: In this paper, the architecture, cross-compiling and installation of Qt/Embedded and Qtopia are introduced. Especially, we focus on how to implement an application program based on Qt/Embedded and how to port an existing application to Qtopia desktop system. The methods introduced in the paper have all been validated in our development platform.
Key words: Embedded System; GUI; Qt/Embedded; Qtopia; Cross-Compiling
1 引言
随着当前各种手持设备、无线设备及信息家电等嵌入式产品的迅猛发展,相应的嵌入式软硬件设计技术也在发生深刻的变化。如今,越来越多的嵌入式终端需要一个图形化的人机接口界面(GUI),良好的人机接口界面是嵌入式系统设计的一个关键技术,能够极大地提高人机交互的效率。本文详细阐述了在自行开发的嵌入式主板上实现某平台的图形显示终端过程。
2系统平台介绍
根据系统设计需求,本文目的是实现一个具有图形接口界面的嵌入式显示终端,该系统使用嵌入式系统设计技术。硬件上,使用自行开发的基于Samsung S3C2440A CPU的目标板,该CPU使用arm920T内核,其主频可达400Mhz;在软件上,选择嵌入式linux为操作系统,因为它源码开放,而且稳定性与安全性较高。
整个系统软件由引导装载程序(uboot)、 设备驱动(包括帧缓存fb)、嵌入式Linux内核、文件系统(yaffs)、基于QT/Embedded和Qtopia的用户图形界面以及应用程序组成,系统平台结构如图(1)所示。
图(1) 系统平台软件结构图
3 Qt/Embedded和Qtopia 介绍及其开发环境的建立
目前嵌入式Linux的主流GUI系统主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同[1]。MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底层的图形引擎,窗口系统和图形接口方面功能比较欠缺,与Win32和X Windows窗口系统保持兼容,提供了相对完善的图形功能。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。
Qt/Embedded是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发[2,3]。现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中,从消费电器(如智能手机、机顶盒)到工业控制设备(如医学成像设备、移动信息系统等)。因此本文选择Qt/Embedded为本系统的GUI。
(1) Qt/Embedded和Qtopia体系结构
Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded的实现结构如图(2)所示:
图(2) Qt/Embedded实现结构
Qt/Embedded的底层图形引擎基于framebuffer。 framebuffer是一种驱动程序接口,它将显示设备抽象为帧缓冲区[4]。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。对用户而言,它和/dev下的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以从这块内存中读取数据,也可以向其中写入数据,而写操作立即反应在屏幕上。为运行Qt/Embedded,嵌入式Linux内核要支持framebuffer。
Qt/Embedded是Qt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded。
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
(2) Qt/Embedded和Qtopia的交叉编译与运行
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
l tmake:跨平台的Makefile生成器。
l moc:用于Qt C++扩展的metra-object编译器。
l uic:从XML文件生成代码的用户界面编译器。
l designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:
l qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。
l qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]。
由于我们使用的是ARM CPU,因此需要对Qt/Embedded和Qtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/Embedded和Qtopia进行交叉编译,需要使用如下的源码树:
l tmake-1.13.tar.gz:用来得到tmake工具。
l qt-embedded-2.3.7.tar.gz:Qt的嵌入式版本。
l qt-x11-2.3.2.tar.gz:Qt的X11版本。
l qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。
l e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。
假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:
①设定tmake的环境变量如下:
export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++
此处指定了tmake在生成Makefile时使用arm交叉编译。
②编译qt-x11,其目的是生成moc、uic、qvfb、designer,并将它们放在qt-embedded/bin目录下。
③配置qt-embedded编译选项,命令为:
./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 4,8,16,32.
此处-platform linux-arm-g++表示在arm平台上进行交叉编译;-qconfig local表示使用src/tools/qconfig-local.h;-depths 4,8,16,32表示需要qt支持的显示颜色深度。
④使用make命令编译qt-embedded,用来生成Qt库(libqte.so)。
⑤配置并交叉编译Qtopia,生成应用程序以及桌面环境。
假设编译完成后将qt和qtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt和/opt/qtopia下,运行Qtopia的方法是:
①设置QTDIR、QPEDIR和键盘鼠标等环境变量
export QTDIR=/opt/qt
export QPEDIR=/opt/qtopia
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=USB:/dev/input/mouse0
②开启qpe,也就是在Linux图形模式下执行/opt/qtopia/bin/qpe &
这样就可以在显示终端上看到qtopia桌面环境了。
4 Qt/Embedded和Qtopia下应用程序的实现
基于Qt/Embedded和Qtopia的GUI设计
王丽洁,习勇,魏急波
(国防科技大学 电子科学与工程学院 湖南省 长沙市 410073)
摘要:介绍了Qt/Embedded和Qtopia的体系结构及其交叉编译过程与安装过程,重点讲述了如何实现Qt/Embedded下的应用程序以及如何将应用程序移植到Qtopia桌面系统。本文介绍的方法在笔者的开发平台上都做过验证。
关键词:嵌入式系统; GUI;Qt/Embedded; Qtopia; 交叉编译
中图分类号:TP368
Design of GUI Based on Qt/Embedded and Qtopia
Wang Li-Jie, Xi Yong, Wei Ji-Bo
(School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China)
Abstract: In this paper, the architecture, cross-compiling and installation of Qt/Embedded and Qtopia are introduced. Especially, we focus on how to implement an application program based on Qt/Embedded and how to port an existing application to Qtopia desktop system. The methods introduced in the paper have all been validated in our development platform.
Key words: Embedded System; GUI; Qt/Embedded; Qtopia; Cross-Compiling
1 引言
随着当前各种手持设备、无线设备及信息家电等嵌入式产品的迅猛发展,相应的嵌入式软硬件设计技术也在发生深刻的变化。如今,越来越多的嵌入式终端需要一个图形化的人机接口界面(GUI),良好的人机接口界面是嵌入式系统设计的一个关键技术,能够极大地提高人机交互的效率。本文详细阐述了在自行开发的嵌入式主板上实现某平台的图形显示终端过程。
2系统平台介绍
根据系统设计需求,本文目的是实现一个具有图形接口界面的嵌入式显示终端,该系统使用嵌入式系统设计技术。硬件上,使用自行开发的基于Samsung S3C2440A CPU的目标板,该CPU使用arm920T内核,其主频可达400Mhz;在软件上,选择嵌入式linux为操作系统,因为它源码开放,而且稳定性与安全性较高。
整个系统软件由引导装载程序(uboot)、 设备驱动(包括帧缓存fb)、嵌入式Linux内核、文件系统(yaffs)、基于QT/Embedded和Qtopia的用户图形界面以及应用程序组成,系统平台结构如图(1)所示。
图(1) 系统平台软件结构图
3 Qt/Embedded和Qtopia 介绍及其开发环境的建立
目前嵌入式Linux的主流GUI系统主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同[1]。MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底层的图形引擎,窗口系统和图形接口方面功能比较欠缺,与Win32和X Windows窗口系统保持兼容,提供了相对完善的图形功能。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。
Qt/Embedded是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发[2,3]。现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中,从消费电器(如智能手机、机顶盒)到工业控制设备(如医学成像设备、移动信息系统等)。因此本文选择Qt/Embedded为本系统的GUI。
(1) Qt/Embedded和Qtopia体系结构
Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded的实现结构如图(2)所示:
图(2) Qt/Embedded实现结构
Qt/Embedded的底层图形引擎基于framebuffer。 framebuffer是一种驱动程序接口,它将显示设备抽象为帧缓冲区[4]。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。对用户而言,它和/dev下的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以从这块内存中读取数据,也可以向其中写入数据,而写操作立即反应在屏幕上。为运行Qt/Embedded,嵌入式Linux内核要支持framebuffer。
Qt/Embedded是Qt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded。
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
(2) Qt/Embedded和Qtopia的交叉编译与运行
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
l tmake:跨平台的Makefile生成器。
l moc:用于Qt C++扩展的metra-object编译器。
l uic:从XML文件生成代码的用户界面编译器。
l designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:
l qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。
l qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]。
由于我们使用的是ARM CPU,因此需要对Qt/Embedded和Qtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/Embedded和Qtopia进行交叉编译,需要使用如下的源码树:
l tmake-1.13.tar.gz:用来得到tmake工具。
l qt-embedded-2.3.7.tar.gz:Qt的嵌入式版本。
l qt-x11-2.3.2.tar.gz:Qt的X11版本。
l qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。
l e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。
假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:
①设定tmake的环境变量如下:
export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++
此处指定了tmake在生成Makefile时使用arm交叉编译。
②编译qt-x11,其目的是生成moc、uic、qvfb、designer,并将它们放在qt-embedded/bin目录下。
③配置qt-embedded编译选项,命令为:
./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 4,8,16,32.
此处-platform linux-arm-g++表示在arm平台上进行交叉编译;-qconfig local表示使用src/tools/qconfig-local.h;-depths 4,8,16,32表示需要qt支持的显示颜色深度。
④使用make命令编译qt-embedded,用来生成Qt库(libqte.so)。
⑤配置并交叉编译Qtopia,生成应用程序以及桌面环境。
假设编译完成后将qt和qtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt和/opt/qtopia下,运行Qtopia的方法是:
①设置QTDIR、QPEDIR和键盘鼠标等环境变量
export QTDIR=/opt/qt
export QPEDIR=/opt/qtopia
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=USB:/dev/input/mouse0
②开启qpe,也就是在Linux图形模式下执行/opt/qtopia/bin/qpe &
这样就可以在显示终端上看到qtopia桌面环境了。
4 Qt/Embedded和Qtopia下应用程序的实现
基于Qt/Embedded和Qtopia的GUI设计
王丽洁,习勇,魏急波
(国防科技大学 电子科学与工程学院 湖南省 长沙市 410073)
摘要:介绍了Qt/Embedded和Qtopia的体系结构及其交叉编译过程与安装过程,重点讲述了如何实现Qt/Embedded下的应用程序以及如何将应用程序移植到Qtopia桌面系统。本文介绍的方法在笔者的开发平台上都做过验证。
关键词:嵌入式系统; GUI;Qt/Embedded; Qtopia; 交叉编译
中图分类号:TP368
Design of GUI Based on Qt/Embedded and Qtopia
Wang Li-Jie, Xi Yong, Wei Ji-Bo
(School of Electronic Science and Engineering, National University of Defense Technology, Changsha 410073, China)
Abstract: In this paper, the architecture, cross-compiling and installation of Qt/Embedded and Qtopia are introduced. Especially, we focus on how to implement an application program based on Qt/Embedded and how to port an existing application to Qtopia desktop system. The methods introduced in the paper have all been validated in our development platform.
Key words: Embedded System; GUI; Qt/Embedded; Qtopia; Cross-Compiling
1 引言
随着当前各种手持设备、无线设备及信息家电等嵌入式产品的迅猛发展,相应的嵌入式软硬件设计技术也在发生深刻的变化。如今,越来越多的嵌入式终端需要一个图形化的人机接口界面(GUI),良好的人机接口界面是嵌入式系统设计的一个关键技术,能够极大地提高人机交互的效率。本文详细阐述了在自行开发的嵌入式主板上实现某平台的图形显示终端过程。
2系统平台介绍
根据系统设计需求,本文目的是实现一个具有图形接口界面的嵌入式显示终端,该系统使用嵌入式系统设计技术。硬件上,使用自行开发的基于Samsung S3C2440A CPU的目标板,该CPU使用arm920T内核,其主频可达400Mhz;在软件上,选择嵌入式linux为操作系统,因为它源码开放,而且稳定性与安全性较高。
整个系统软件由引导装载程序(uboot)、 设备驱动(包括帧缓存fb)、嵌入式Linux内核、文件系统(yaffs)、基于QT/Embedded和Qtopia的用户图形界面以及应用程序组成,系统平台结构如图(1)所示。
图(1) 系统平台软件结构图
3 Qt/Embedded和Qtopia 介绍及其开发环境的建立
目前嵌入式Linux的主流GUI系统主要有MiniGUI、Microwindows、OpenGUI、Qt/Embedded,这些GUI在接口定义、体系结构、功能特性存在很大差别,采取的技术路线也有所不同[1]。MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底层的图形引擎,窗口系统和图形接口方面功能比较欠缺,与Win32和X Windows窗口系统保持兼容,提供了相对完善的图形功能。OpenGUI基于一个用汇编实现的x86图形内核,提供了一个高层的C/C++图形/窗口接口,它的资源消耗小,可移植性差,不支持多进程。
Qt/Embedded是一个多平台的C++图形用户界面应用程序框架,其对象容易扩展,可移植性好,支持多个GUI平台的交互开发[2,3]。现在,Qt/Embedded被广泛地应用于各种嵌入式产品和设备中,从消费电器(如智能手机、机顶盒)到工业控制设备(如医学成像设备、移动信息系统等)。因此本文选择Qt/Embedded为本系统的GUI。
(1) Qt/Embedded和Qtopia体系结构
Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,与X11版本的Qt在最大程度上接口兼容,采用帧缓存(framebuffer)作为底层图形接口。Qt/Embedded类库完全采用C++封装,并且有着丰富的控件资源以及较好的可移植性,大范围的Qt/Embedded API可用于多种开发项目。Qt/Embedded的实现结构如图(2)所示:
图(2) Qt/Embedded实现结构
Qt/Embedded的底层图形引擎基于framebuffer。 framebuffer是一种驱动程序接口,它将显示设备抽象为帧缓冲区[4]。该驱动程序的设备文件一般是/dev/fb0、/dev/fb1等。对用户而言,它和/dev下的其他设备没有什么区别,用户可以把framebuffer看成一块内存,既可以从这块内存中读取数据,也可以向其中写入数据,而写操作立即反应在屏幕上。为运行Qt/Embedded,嵌入式Linux内核要支持framebuffer。
Qt/Embedded是Qt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded。
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
(2) Qt/Embedded和Qtopia的交叉编译与运行
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
l tmake:跨平台的Makefile生成器。
l moc:用于Qt C++扩展的metra-object编译器。
l uic:从XML文件生成代码的用户界面编译器。
l designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:
l qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。
l qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]。
由于我们使用的是ARM CPU,因此需要对Qt/Embedded和Qtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/Embedded和Qtopia进行交叉编译,需要使用如下的源码树:
l tmake-1.13.tar.gz:用来得到tmake工具。
l qt-embedded-2.3.7.tar.gz:Qt的嵌入式版本。
l qt-x11-2.3.2.tar.gz:Qt的X11版本。
l qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。
l e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。
假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:
①设定tmake的环境变量如下:
export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++
此处指定了tmake在生成Makefile时使用arm交叉编译。
②编译qt-x11,其目的是生成moc、uic、qvfb、designer,并将它们放在qt-embedded/bin目录下。
③配置qt-embedded编译选项,命令为:
./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 4,8,16,32.
此处-platform linux-arm-g++表示在arm平台上进行交叉编译;-qconfig local表示使用src/tools/qconfig-local.h;-depths 4,8,16,32表示需要qt支持的显示颜色深度。
④使用make命令编译qt-embedded,用来生成Qt库(libqte.so)。
⑤配置并交叉编译Qtopia,生成应用程序以及桌面环境。
假设编译完成后将qt和qtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt和/opt/qtopia下,运行Qtopia的方法是:
①设置QTDIR、QPEDIR和键盘鼠标等环境变量
export QTDIR=/opt/qt
export QPEDIR=/opt/qtopia
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=USB:/dev/input/mouse0
②开启qpe,也就是在Linux图形模式下执行/opt/qtopia/bin/qpe &
这样就可以在显示终端上看到qtopia桌面环境了。
4 Qt/Embedded和Qtopia下应用程序的实现
Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim)和Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。
(2) Qt/Embedded和Qtopia的交叉编译与运行
整个GUI系统的构建需要对Qt/Embedded、Qtopia依次分别编链,然后有机地整合在一起。Qt/Embedded为Qtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。
在构建GUI时用于Qt开发的典型工具如下:
l tmake:跨平台的Makefile生成器。
l moc:用于Qt C++扩展的metra-object编译器。
l uic:从XML文件生成代码的用户界面编译器。
l designer:用于设计窗口组建的应用程序。
Qtopia的开发工具包SDK(Software Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:
l qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。
l qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]。
由于我们使用的是ARM CPU,因此需要对Qt/Embedded和Qtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/Embedded和Qtopia进行交叉编译,需要使用如下的源码树:
l tmake-1.13.tar.gz:用来得到tmake工具。
l qt-embedded-2.3.7.tar.gz:Qt的嵌入式版本。
l qt-x11-2.3.2.tar.gz:Qt的X11版本。
l qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。
l e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。
假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:
①设定tmake的环境变量如下:
export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++
此处指定了tmake在生成Makefile时使用arm交叉编译。
②编译qt-x11,其目的是生成moc、uic、qvfb、designer,并将它们放在qt-embedded/bin目录下。
③配置qt-embedded编译选项,命令为:
./configure -platform linux-arm-g++ -qconfig qpe -qvfb -depths 4,8,16,32.
此处-platform linux-arm-g++表示在arm平台上进行交叉编译;-qconfig local表示使用src/tools/qconfig-local.h;-depths 4,8,16,32表示需要qt支持的显示颜色深度。
④使用make命令编译qt-embedded,用来生成Qt库(libqte.so)。
⑤配置并交叉编译Qtopia,生成应用程序以及桌面环境。
假设编译完成后将qt和qtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt和/opt/qtopia下,运行Qtopia的方法是:
①设置QTDIR、QPEDIR和键盘鼠标等环境变量
export QTDIR=/opt/qt