2024年5月8日发(作者:)
……
G眦PHICS删n II帅GE PROCESSING……………………………………… …………… ……………………
Qt下 哪 图形的霹计与
曩 ll。 张小进 。
摘要:阐述了XPM图形显示的原理,为满足嵌入式系统图形显示需要,通过Qt编程的方法实
现了XPM图形的显示。
关键词:XPM图形:Qt;文件图标
1 引言
随着计算机技术的飞速发展,对嵌入式系统的整体显示要
求也越来越高。系统的开机界面、管理设置界面等都用到图形
用户界面,由于嵌入式系统自身资源的限制,所以需要图形在
满足功能要求的前提下其占用的存储空间要尽可能小.而
XPM图形恰能满足这样的特点。目前在嵌入式系统的图形用
户界面设计中,Qt以其开源、跨平台、功能强大、API接口丰
富等特点日益受到广大开发用户的欢迎。
2 XPM图形
XPM图形格式是X Windows系统中一种标准的、以ASCII
码文本形式存储的图形格式1:这种图形格式可以用任何文本
编辑器来创建或修改具有简单色彩的图形,更重要的它是C语
言代码的格式,可以直接编译到程序中。例如,一个普通文件
图标的XPM图形可以定义如下:
static const char file
_
xpm[】={
14 16 4 1 .
。#c#000000 .
“e c#c4c4c4 .
“d c#404000”,
”
.
c None。.
"ddddddddd….“.
d…….dd…. .
”d…….d.d…。.
d…….禅d..d一。
d…….d#抖舟dd”.
”d………一e 。,
d………..e拌。.
“d………..e#。.
”d………一e舟 ,
d………一e#。.
“d………一e#’.
“d………..e# .
d………..e#-.
”deeeeeeeeeeee拌”.
”##群#槲≠舟群#####样”):
XPM图形格式的内容由3部分构成:第一个部分是格式
的说明,包含图形像素的列数(宽度)、图形像素的行数(高
度)、图形的颜色数和每个像素的字符数,是以双引号括起、
以空格分隔、以逗号结束的行;第二部分是自定义字符表示各
种颜色;第三部分是用自定义字符构成的图形形状。
2.1 格式说明
(1)图形像素的列数与行数
由于XPM图形主要用于显示一些少量色彩的图形或图
标,因此其列数与行数一般不太大:如果应用于系统登录界面
的显示图形。可以有几百个像素列或行:如果应用于系统的图
标,则只要16到32个像素列或行即可。
(2)图形的颜色数
根据具体应用的复杂程度,可以设置几种到几百种颜色。
需要注意的是这里的颜色数值要与随后定义的“字符c#RGB
颜色值”的数量一致,否则不能正常显示图形。
(3)每个像素的字符数
这个数值表示用几个字符代表一个像素点,对于简单的
图标设置为1即可,而复杂一点的图形可设置为2:当该值大
于1时,代表RGB颜色值的字符也要与之对应.但允许有少
于该值的字符表示颜色;例如,该值设置为2时,要用两个字
符表示颜色,但也允许用一个字符表示。
2.2定义图形颜色
如果每个像素的字符数为l,则使用1个字符表示颜色:
字符可以是任何可打印字符.其格式是: “”字符c#RGB颜
色值“,”每行定义一种颜色,c是关键字,#表示颜色值开始;
图形的空白处定义为 字符c None”.”。RGB颜色值用16进
制表示,RGB的取值分别为O—ff,若为fffff表示白色,若为
000000表示黑色,若RGB取值相同表示单色,值不同则呈现
不同的灰度等级,若RGB取值不同表示彩色;可以通过调色板
来查看某种颜色所对应的RGB值,以修改到自己满意为止。
2.3构成图形形状
如果每个像素的字符数为1,则使用1个字符构成图形的
……………………………一
实用第一 翅入川 I=1慧密隹面山 71g
, … … … …
像素点。一般复杂的彩色图形用手z:OJ建或修改很麻烦且容易出
(ListView)、下拉列表框(ListBox)、菜单(Menu)、组合框
错,可以使用Linux系统下的conve ̄命令从.png或.jPg图形转换
得到,但是对于定制个性化的图标(色彩少、图形简单)却可以
通过手工创建;当然,也可以由.ieo文件转换后进行修改
(ComboBox)等控件对象中。使用时可根据需要动态地加以添
加或删除,添加一个图标就是在相应的控件对象中插入一个
项,所以在下拉列表框中添加项的函数是:
insertltem(const QPixmap&pixmap,int index=-1):
或
insertltem(const QPixmap&pixmap,const QString&
text,int index=一1):
3 Qt下的应用
Qt是一个跨平台的C++图形用户界面类库,它包含大量的
可重用类和一些抽象类。Qt是完全面向对象,有良好的可扩
展性和稳定性,支持模块化编程2。由于XPM图形是C语言
代码的格式,所以在Ot巾使用非常方便。
3.1 界面XPM图形显示
在Qt下用于显示XPM图形的类有许多种,作为设计用户
界面XPM图形显示比较方便的是QIconView类.例如.用该
类创建一个对象:
My
_
iconView=new QIconView(this,”My_iconView”):
QIeonView类可以显示和管理给图形做过标记的一个栅格
或其他的二维布局3。每个标记的图形通过QlconViewItem类
的构造函数在QIconView类的对象中提供一个项;任何时候都
可以在QIconView类的对象中添加、删除或移动这个项。每个
项都包含说明字符串、位图或图形(图标)和可选的排序关键
字。在显示位图或图形的下方可以显示说明字符串。QIcon—
ViewItem类的构造函数之一是:
QIconViewltem(QIconView parent.const QString&
text.const QPixmap&icon);
其中,第一个参数是父指针,即指向前面创建的QIcon—
View类的对象;第二个参数是说明字符串;第三个参数就是
要显示的XPM图形。如实现图1界面的语句为:
(void)new QIconViewltem(My
iconView,trUtf8(“欢迎登
录系统”),QPixmap::fromMimeSource(“logo.xpm”)):
图1 界面XPM图形
3.2图标XPM图形显示
在许多应用场合,需要用到图标。例如,系统中管理的各
种类型文件、文件夹需要图标;菜单或T具栏上的快捷方式需
要图标。虽然Linux系统中有多种图标可供选择,但如果设计
的系统都是相同的图标未免乏味,所以定制个性化的图标是设
计个性化系统的一个基础。文件或文件夹图标通常用于列表框
、 嚣 与鲡藿矮焉与雏 雏 萄簟
前一个语句的第一个参数是XPM图形的地址.第二个参
数是默认的序号;后一个语句多了图标的说明文本字符串参
数。不同的控件对象所用的函数名都是insertltem,但是所带
的参数可能是不一样的。
以下这段代码是在打开的文件中根据不同的文件属性显示
对应的图标和文件或目录名,这里只判断是否为目录、是否为符
号链接文件和普通文件,根据需要还可以判断是否为可执行、是
否为只读、是否可写、是否为隐藏等等。执行效果如图2所示。
.f(fi一>fileName()== .”『 Ifi一>fileName()== ..”)
else_f(fi一>isSymLink())
listBoxl一>insertltem(QPixmap《link
_
file
_
xpm),fi一>file—
Name()):
else if(fi一>isDir0)
listBoxl一>insertltem(QPixmap(folder_xpm),fi一>
fileName0);
else
listBoxl->insertltem(QPixmap(file
_
xpm),fi一>fileName0);
以上代码中link_file_xpm、folder_xpm、file_xpm都是自己
定义的XPM图形(定义的方法见XPM格式小节介绍),它们
是以数组的形式存在,所以在语句中不能加双引号。
图2文件夹、符号链接文件和普通文件的XPM图标显示
4结语
主要对XPM图形的格式、界面XPM图形的显示和图标
XPM图形显示问题进行了讨论,受篇幅限制只给出了普通文
件的XPM图标图形,但根据原理设计出各种个性化的图标图
形应该并不难。Qt下设计的应用程序既可以运行于PC,也可
以通过具体平台的交叉编译在嵌入式系统中使用。
参考文献
【1】范永开,等.Linux应用开发技术详解.人民邮电出版社,2006.
[2]孙纪坤,等.嵌入式Linux系统开发技术详解.人民邮电出
版社,2006.
[3】Qt Reference Documentation.
(收稿日期:2010~07—30)


发布评论