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

基于Qt/Embedded和Qtopia的GUI设计

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

 

创建按钮实现对应用程序的调用

    Qt部件与用户的交互方式不同于其他的GUI工具包,其他的GUI工具包使用回调函数创建用户交互,但是Qt提供了信号/(signal/slots)[5]通信机制描述对象间的无缝通讯。槽(slot)标准的成员函数,它能够连接到信号,每当槽所连接的信号被发射时,槽(函数)就被执行。信号(signal)是一种特殊类型的函数,都是返回void型,它们被定义为当某个事件发生时就被发射,之后执行所有被连接的槽。当定义信号时必须使用QT的宏SIGNAL(),定义槽时必须使用宏SLOT()

通过调用QObject对象的connect函数可以将某个对象的信号与另一个对象的槽相关联,这样当发射对象发射信号时,接收对象的槽将被调用。该函数定义如下:

bool QObject::connectconst QObject *sender,const char *signal,const QObject *receiver,

                         const char *member)

与这个函数对应的disconnect函数,可以将信号和槽断开连接。

   本文使用了QT提供的按钮clicked()信号,自定义了槽函数run()实现对应用程序的调用,并且定义了槽函数mycall()调用已经使用了特定参数的run()函数。

例如当一个按钮B1被点击时,它就发送“clicked”信号,通过connect()函数将信号与槽“mycall”连接起来,调用/opt/qt/examples/clock/下的应用程序“clock”的代码如下:

void MyMainWindow::mycall()

{

MyMainWindow::run(“(cd /opt/qt/examples/clock; exec ./clock;)”);

}

connect(B1,SIGNAL(clicked()),this,SLOT(mycall())); 

 

图像背景的显示

为了在Qt中装载和显示所支持的图像格式,需要创建一个QPixmap对象。QPixmap本质上是一个“屏幕外的部件(off-screen)”,图像可以先复制到一个QPixmap对象上,然后传送到QWidget

QWidget部件使用如下的成员函数来为窗口添加图像背景:

Public Members

const QPixmap* backgroundPixmap () const

virtual void setBackgroundPixmap ( const QPixmap & ) 

例如有一幅名为flower.png的图片,将其设为背景的代码如下:

QPixmap picture(“flower.png”)

SetbackgroundPixmap(picture)

 

中文显示

    Qt的中文显示是Qt国际化的一部分,“国际化”简称为i18n,用来提供一个架构,让同样的代码可以适用于各种语种习惯和编码系统,程序设计人员只要利用这个架构的机制、准则编写应用程序,就可以在不新编译代码的情况下,支持各种语言。

    Qt支持Unicode—国际标准字符集,程序员可以在程序里自由的混用英语、汉语和其他Unicode所支持的语言。为Qt增加一种编码只需要增加该编码和Unicode的转化编码就可以了,Qt支持中文的GBK/Big5编码。

Qt支持的字体常用的是ttfqpfqpfQt/Embedded专用的一种适合嵌入式应用的字体它属于位图字体不可以缩放,而ttf字体可以缩放默认情况下Qt/Embeddedlib/fonts目录下提供了一种可以显示中文的字体库UniFont,但是该字体库中没有ttf的字体。为了使用ttf字体显示中文,本文采取如下的方法:拷贝一种支持unicode编码的ttf字体到lib/fonts目录下,例如,windows系统下的宋体simsun.ttf;同时还需要在此目录的fontdir本中添加下面一行

simsun simsun.ttf FT n 50 0 su

fontdir脚本用来向系统注册所支持的字体,它的每一行定义了一种字体的设置,其格式如下:

<字体名称><字体文件名><字体渲染类型><是否斜体><尺寸><字体标志>[尺寸列表]

在程序设计中,首先指定编码方式以支持中文:

QTextCodec *code=QTextCodec::codecForName("GBK")

接着为部件(例如Mywidget)执行 Unicode的转化编码

QString uniStr=code -> toUnicode("要显示的中文字符")

Mywidget-> setFont(QFont("simsun",20,QFont::Bold))

Mywidget-> setText(uniStr)

(2) Qtopia移植应用程序

Qtopia是一个基于QT/Embedded开发的一个嵌入式的桌面环境和应用程序集可以方便地在Qtopia桌面环境中添加用户应用程序或者对桌面进行配置。为了添加用户应用程序,需要在Qtopia/apps/Application目录下建立一个.desktop的桌面文件,该文件指明了桌面文件的图标以及应用程序的入口点。应该注意的是为了让新的应用程序在Qtopia桌面环境中运行,应用程序必须使用QT提供的图形库进行编译。

下面以移植嵌入式的web浏览器konqueror为例,说明添加新的应用程序的过程。

(1)下载konqueror源代码,对其进行交叉编译。为了支持中文显示和flash,还需要进行必要的源代码修改,并且加入相应的插件。

(2)konqueror.png图标文件拷贝到在/opt/Qtopia/pic/下。

(3)konqueror可执行文件放于/opt/konqueror/下,然后在Qtopia/apps/Application目录下建立konqueror.desktop文件,具体内容可参考qtopia自带的.desktop文件。需要注意的是konqueror.desktopExec项应指明可执行文件的具体位置。例如:Exec=/opt/konqueror/bin/konqueror

(4)导出konqueror的运行环境变量,就可以直接在桌面上点击其图标浏览网页了。

5 结束语

嵌入式产品的广泛应用带动了图形用户界面(GUI)的迅速发展,嵌入式系统需要一个高性能、高可靠的GUI的支持。基于Qt/EmbeddedQtopia桌面系统为系统用户提供了良好的使用和交互环境。本文系统介绍了基于Qt/Embedded开发应用程序的方法以及将现有的应用程序移植进Qtopia的具体过程,为类似的系统开发供了一个参考。

 

 

参考文献

[1] 丁丁,习勇,魏急波,三种主流嵌入式图形用户界面的移植及性能比较,《电子产品世界》,2004,9(5):73-74

[2] QT 3.3白皮书,http://www.trolltech.com

[3] 袁鹏飞,24小时学通qt编程,北京:人民邮电出版社,2000/11

[4] 于明俭,陈向阳,方汉, LINUX程序设计权威指南,北京:机械工业出版社,2001/4

[5] 张娟,张雪兰,基于嵌入式的GUI应用程序的实现,《计算机应用》,2003,23(4):115-117

作者简介:王丽洁(1981-),女,硕士研究生,研究方向为嵌入式系统的开发与应用。

作者联系方式:410073,湖南长沙国防科大四院2系,0731457575213873163041lilywang_04601@163.com


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