热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

基于Qt/Embedded和Qtopia的GUI设计

来源:互联网 作者:王丽洁,习勇,魏急波 时间:2007-11-17 Tag: 点击:

(1) Qt/EmbeddedQtopia体系结构

Qt/EmbeddedTrolltech公司开发的面向嵌入式系统的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/EmbeddedQt的面向嵌入式应用的简化版本,它包括一组完备的GUI类、操作系统封装、数据结构类、功能类和组合类。大部分Qt的应用程序可以经过简单的编译与重设窗口大小移植到Qt/Embedded

Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集,如地址本、图像浏览、Media播放器等,还包括娱乐和配置工具,广泛用于PDA等掌上设备。Qtopia平台由Qtopia (Qt/E,libqpe,libqtopia1,qtopiapim)Qtopia server/laucher组成。Qtopia server/laucher是控制窗口系统、进程间通信、发起所有应用和其他核心任务的主要服务程序。

(2) Qt/EmbeddedQtopia的交叉编译与运行

整个GUI系统的构建需要对Qt/EmbeddedQtopia依次分别编链,然后有机地整合在一起。Qt/EmbeddedQtopia提供了底层支持,GUI系统的图形库窗口组建都由Qt/Embedded实现。

在构建GUI时用于Qt开发的典型工具如下:

l         tmake跨平台的Makefile生成器。

l         moc:用于Qt C++扩展的metra-object编译器。

l         uicXML文件生成代码的用户界面编译器。

l         designer:用于设计窗口组建的应用程序。

Qtopia的开发工具包SDKSoftware Development Kit)是Qtopia开发环境的核心部分,编译后得到创建应用程序所需的软件包如下:

l         qvfb(virtual frame buffer)X窗口用来运行和测试Qtopia应用程序的系统程序。

l         qpe(Qtopia executable):用来处理所有的用户程序界面[2,5]

由于我们使用的是ARM CPU,因此需要对Qt/EmbeddedQtopia开发工具包进行交叉编译。本文使用arm-linux-gcc-3.3.2来建立交叉编译环境。为了对Qt/EmbeddedQtopia进行交叉编译,需要使用如下的源码树:

l         tmake-1.13.tar.gz:用来得到tmake工具。

l         qt-embedded-2.3.7.tar.gzQt的嵌入式版本。

l         qt-x11-2.3.2.tar.gzQtX11版本。

l         qtopia-free-1.7.0.tar.gz:官方网站提供的Qtopia免费版。

l         e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.hlibuuid.so

假设将上述源码树放在同一目录下,例如:/root/qtopia,并依次解压,然后进行编译,步骤如下:

设定tmake的环境变量如下:

export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++

此处指定了tmake在生成Makefile时使用arm交叉编译。

编译qt-x11,其目的是生成mocuicqvfbdesigner,并将它们放在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,生成应用程序以及桌面环境。

假设编译完成后将qtqtopia相关的库及所需文件分别存放于目标板文件系统的/opt/qt/opt/qtopia下,运行Qtopia的方法是:

设置QTDIRQPEDIR和键盘鼠标等环境变量

  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/EmbeddedQtopia下应用程序的实现

(1) Qt/Embedded应用程序的实现

Qt是一个创建GUI程序的C++类库,编写Qt应用程序的主要工作是基于已有的Qt类编写用户类。Qt应用程序的设计使用基于工程的方法,并通过.pro文件进行工程管理。实现应用程序的第一步是编写.pro文件,然后使用tmake根据该文件生成Makefile,最后进行源代码的编写。tmake的语法如下:

tmake *.pro –o Makefile

.pro的具体内容可以参考/qt/examples/下其他应用程序的.pro文件。

在本项目的研究中,需要涉及基本的窗口构建、应用程序的调用、图像背景的显示以及中文显示,下面对此进行详细阐述。

构建主窗口

    Qt拥有众多的窗口部件,如按钮、菜单、滚动条和应用程序窗口等,它们组合起来可以创建各种用户界面。QWidget 是所有用户界面对象的基类,窗口部件是QWidget或其子类的实例。

创建主窗口先要在main.cpp函数中创建QApplication类型的对象。QApplication类管理图形用户界面应用程序的控制流和主要设置,它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度,它也处理应用程序的初始化和结束,并提供对话管理。对于任何一个使用Qt图形用户界面应用程序,都正好存在一个QApplication对象。然后定义主窗口变量,并通过QApplication类型的函数调用主窗口变量来启动主窗口。

创建主窗口部件最常用的方法是基于QWidgetQDialog类创建一个用户类。QDialog类是对话框窗口的基类,主要用于短期任务以及和用户进行简要通讯的顶级窗口。在本程序中使用QWidget类创建用户类,并使用户类通过公有继承派生于Qwidget类。

    在构建窗口时需要注意用户界面的风格和布局。Qt提供了WindowsWindowsXPMotifMotifPlusCDEPlatinumSGIMac的内置风格。自定义风格可以通过继承QStyleQCommonStyle或其他QCommenStyle类来完成。应用程序的风格可以如下设置:

    QApplication::setStylenew MyCustomStyle

    在布局上Qt提供了布局管理器来组织父部件区域中的子部件,Qt内建的布局管理器有QHBoxLayoutQVBoxLayoutQGridLayout,而且布局也可以嵌套在任意层。例如使用QHBoxLayout(按行放置部件)的部件管理器为例在窗口水平放置两个按钮B1B2的代码如下:

    QHBoxLayout *hbox = new QHBoxLayout(this);

    Hbox->addWidget(B1);

Hbox->addWidget(B2);

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册