基于Qt的跨平台军标标绘系统的实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
总第231期 2009年第l期
计算机与数字丁程 Computer&Digital Engineering
V01.37 No.1 7l
基于Qt的跨平台军标标绘系统的实现。
卢虹向慧黄继红 (武汉数字工程研究所武汉430074)
摘要Qt是开发跨平台应用程序的标准框架。它提供了不同操作系统之间的源代码级的可移植。原有军标标绘的 绘图系统是与操作系统相关的,并且与Qt的绘图系统存在很大的不同。通过分析两者的差异,将原系统移植到Qt平台 上,可以实现它的跨平台能力。
可见,Windows图形系统中的设备上下文其 实相当于Qt绘图系统中QPainter和QPaintDe- vice两者功能的合成。在Qt中,QPainter与 QPaintDevice是相互依赖的关系,两者的对象可以 相互访问,因此可以选取其中一个用于表示设备上 下文的概念。为方便说明,本文选用QPainter来 表示设备上下文。Qt中用于表示位图概念的是 QPixmap,它本身是一种绘图设备,用它来表示 Windows中的位图是可行的。
Abstract ot by Trolltech is the standard framework for developing high·performance cross-platform applications and it provides single-soHree portability across different OSs.The paint system of the existing military marks marking sys— tem is related to OS,and is much different from Qt’S paint system.The paper presents a technique to implement its porta- bility by analyzing their differences,and porting the system onto Qt platform.
本文所要解决的第二个问题是基于Qt的图形 平台在绘制军标时如何在屏幕上正常显示与利新。 基于图形平台的应用程序开发要求将屏幕设备传 人图形管理器对象,图形平台即可自动完成军标的 绘制,并在屏幕上显示出来[2|。但是与Windows 图形编程中设备上下文可以立即更新绘制的内容 不同,在Qt中,任何位于QWidget的paintEvent (QPaintEvent*)3-法之外进行的图形图像的绘制 都不能正确显示在屏幕上[6|,例如下面的代码是无 法在屏幕上画出线段的:
万方数据
72
卢 虹等:基于Qt的跨平台军标标绘系统的实现
第37卷
台,一次编写,随处编译。Qt应用程序可以移植到 不同的平台上,只需重新编译即可运行L3j。Qt支 持包括Windows.UNIX/XII Mac OSX和嵌入式 Linux等众多平台。
Qt是非常优秀的应用程序开发框架,具有很 多的优点:1)Qt包含了一系列的模块,通过这些模 块隐藏了在处理不同窗口系统时的潜在问题,实现 了跨平台的可移植性[23;2)Qt的元对象系统提供 了用于内部对象通信、运行时类型信息和动态属性 系统的信号和槽机制,从而实现了完全面向对象和 真正的组件编程。3)Qt完全支持国际化应用,基 于消息翻译表,用户界面文本可以被翻泽成各国语 言;4)(at支持用户化的外观,基于Qt的应用软件 能在Motif外观、Windows外观及一些用户化的外 观之间相互转换[5]。
经过移植后的新军标系统的层次结构如图2 所示。 3.1基本图形绘制接口层
基本图形绘制接口层是图形绘制概念的抽象, 封装操作系统的相关特性。它由一些C类型的接 口函数组成,图形平台通过涮用这些函数来实现与 操作系统相关的功能。这些接口甬数可以分为以 下几类:
1)重绘与清空指定的区域; 2)绘图设备、位图的创建、删除及拷贝; 3)绘图属性的设置,包括绘图逻辑操作、背景 模式、填充模式、背景色、前景色、线型、线宽、字体 的设置; 4)基本图形的绘制操作,包括移动起点,点、线 段、折线、多边形、多个区域构成的多边形、矩形、椭 圆、椭圆弧、椭圆扇形、椭圆弓形、文字的绘制; 5)路径剪裁与区域剪裁; 6)坐标转换,包括地理坐标、地图坐标及屏幕 坐标之间的相互转换; 7)消息转换,将系统的消息描述结构体转换为 图形库所能识别的消息描述结构体; 8)默认设置同调函数,设置图形库中图形管理 器的默认函数。 3.2关键点分析 本文的设计思想是将基本图形绘制接口层的 接口函数用Qt实现,其关键是将图形平台有关图 形的概念与Qt的图形概念对应起来。通过分析基 本陶形接口层的接口函数的定义,可以看出图形平 台的图形系统是模仿Windows设计的,因此实际 上是Windows图形系统概念到Qt图形系统的转 换。不管是windows图形系统还是Qt图形系统, 它们首要的重点都是解决绘图设备的抽象问题,因 此本文首先要解决的一个问题是绘图设备及位图 的对应关系问题。 设备上下文与位图是Windows图形系统中两 个最重要的概念。设备上下文其实是对视频显示 卡、打印机、绘图仪和传真机等图形设备抽象,它提 供两个重要的作用:一个是提供图像设备逻辑,使 得设备驱动程序以上的一切事物都独立于设备;另 一个是存储常用的绘图属性,比如前景色、扫描操 作、画笔和字体等等叫。而位图术语指的是通常意
万方数据
第37卷(2009)第1期
计算机与数字工程
73
义上的图像,即由像素组成的矩形阵列L9]。win— dows下支持三种GDI格式的位网:设备无关位图 (DIB)、DIB段和没备相关位图(DDB)。
Qt中的绘图部分称为Arthur绘图系统,它由 三个主要的类支撑起整个框架:QPainter,QPaint- Device和QPainterEngine。QPainter用来执行具 体的绘图相关操作,如画点、画线、填充、变换等。 QPaintDevice是QPainter用来绘图的绘图设备, Qt中有几种预定义的绘图没备,如QWidget, QPixrnap,QPrinter等。都是从QPaintDevice继承 而来的。QPaintEngine类提供了不同类型没备的 接口,对程序员不透明,由QPainter,QPaintDe— vice类与其进行交互。此外,Qt提供了画笔QPen 用于绘制线和轮廓,画刷QBrush进行填充。画笔 定义了线型、宽度、笔尖端点和端点连接方式。画 刷定义不同填充模式和颜色的画刷。绘制文字时, 字体使用QFont类定义[2 ̄7]。
Key words military marks marking,Qt,paint system,cross-platform Class Numbor TP391.41
1 引言
军标标绘是指控系统的一项重要功能,主要负 责军标的绘制。原有的军标标绘系统基于一个图形 平台,该平台封装了图形管理功能,实际上是一个完 整的GIS开发平台,它采用标准C++编码,不依赖 于操作系统和编译环境。但图形平台本身没有实现 与操作系统相关的绘图操作,所以在其下层需要提 供基本图形绘制接E1层封装操作系统相关的画点、 画线等绘图操作,对于不同操作系统提供统一的绘 图操作接口。例如,windows下的基本图形绘制接 口层主要用于封装对GDI对象的操作。
3分析与实现
原有军标标绘系统的结构如图1所示:
一星呈薹豢羔萎鬈霪 广———两万再亍_—] lL丝些鱼堕堡堡垒型I I应用层

应用层:图形平
台的实际应脂,通过
使用图形平台的接
L一些唑坐I_———J 制界面等。
图1原有军标标绘系统结构
图形平台层:军
标绘制的逻辑实现,包括坐标变换、军标对象管理
与绘制等等,在实际绘图的时候凋用基本图形接口
2 Qt的特点
Qt是挪威的Trolhech公司开发的跨平台的 应用程序框架,是开源桌面系统KDE的基石。自 Trolltech公司1996年以来推出Qtl.0版以来,已 经发展到了现在的Qt4.4。和Java的“一次编译, 到处运行”跨平台不同的是,Qt是源代码级的跨平
·收稿日期:2008年8月15日,修回日期:2008年9月7日 作者简介:卢虹,男,硕十研究生,研究方向:软件工程,分布式计算,构件技术。向慧,男,硕士研究生,工程师,研究方 向:计算机图形学。黄继红,男,研究员,硕上生导师,研究方向:软件工程,分布式计算,计算机应用。
这样的设计一定程度上考虑了可移植的需求, 当需要将军标标绘系统移植到其它系统平台上(如
Solaris)时,只要重新实现基本图形绘制接口层。 但这同时也带来一个问题,不同操作系统平台,需 要不同的基本图形绘制接口层的实现版本。因此, 本文利用Qt一次编写随处编泽的跨平台特性,将 基本图形绘制接口层移植到Qt平台上,实现了军 标标绘系统的跨平台能力,并在某指控系统原型中 予以了具体应用。
新,因为传入的设备不是屏幕没备。因此,在基本 图形绘制接口层中提供了回调函数的设置接口,在 应用程序中,开发人员必须重新实现重绘区域函 数,并调用设置回调的接口函数设置成图形平台中 图形管理器对象的重绘函数。 3.3接口的Qt实现
通过以上分析可以清楚地知道移植工作的第 一步就是使用QPainter来表示绘图设备,具体到 实现就是将图形平台的GBHDC类型强制转换成 QPainter*类型:
//GBHDC hDC
QPainter。pDC一(QPainter*)hDC;
接下来就可以使用转换后的Qt类型进行具体 的属性设置、图形绘制等操作。
1)重绘与清空指定区域 由前分析可知,重绘区域甬数由用户实现。而 清空区域只需将指定区域填充为背景色。即:
QPainter’pDC=(QPainter*)hDC; if(W一一一1)
改变,同时具有
跨平台能力。其
[[[圆二 二二圆二 塑二]亘亟二匾雯亟亟 圃亚[互圆二西二二口口]]
关键是基本图形 绘制接口层既要 保证对图形平台 的接口不变,同 时又要具有跨平
图2军标标绘系统的层次结构 台功能L 8l。为
此,本文的设计思想是将基本图形绘制接口层移植 到Qt平台上,通过运用Qt的跨平台性来实现军 标标绘系统的跨平台能力。
W=pDC-->device()-->width(); if(h一一一1)
h—pDC一>device()一>height(); pDC-->fillRect(x,Y,W,h,pI)C~>backgroud());
2)设备上下文与位图操作 位图的创建、删除和拷贝其实就是QPixmap 对象的创建、删除和拷贝;而设备上下文的操作相 对复杂,它需要分别操作QPainter和QPaintDe— vice这两个对象的,Qt提供了几种默认的绘图设 备如QWidget、QPixmap等,另外用户可以通过继 承QPaintDevice自定义绘图设备。由于Qt提供 的默认绘图设备已足够供图形平台使用,因此这里 只实现了几种默认绘图设备的创建、删除与拷贝。 下面具体说明绘图设备创建的实现流程:
层中的基本绘图函数。
基本图形绘制接口层:封装Leabharlann Baidu作系统相关的绘
图操作,其中大部分是c形式的接口函数,以win—
dows为例,它主要进行GDI对象的创建,点、线、
椭圆等图形对象绘制,缓冲区处理等等与操作系统
相关的操作[1]。
从图1中可以看到,为保证原有投资,移植后
的新军标系统首先应保证应用层程序不需做任何
QPainter painter(/*QWidget**/widget),
painter.drawl,ine(0,0,100,100);
因此,不能将屏幕设备直接作为图形平台的绘 图设备传入。一种解决的方法是双缓冲绘网,将位 图设备传给图形平台,然后在paintEvent()方法中 将位图设备内容拷贝到屏幕设备,具体方法见本文 第四部分应用举例。但是这又会导致接口层中的 重绘区域函数虽然被调用,屏幕却不能及时得到刷
关键词军标标绘Qt绘图系统跨平台 中图分类号TP391.41
Implementation of Cross—Platform Military Marks Marking System Based on Qt
Lu Hong Xiang Hui Huang Jihong
(Wuhan Distal Engineering Institute,Wuhan 430074)
相关文档
最新文档