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)