APP下载

基于QT的电子画板的设计

2012-11-14冯耀玲孙运强姚爱琴

电子测试 2012年12期
关键词:图形用户界面缓冲区画板

冯耀玲, 孙运强, 姚爱琴

(中北大学, 仪器科学与动态测试教育部重点实验室, 山西太原 030051)

0 引言

电子画板的优点不言而喻,可随意修改,快速存储,快速传播,几乎不耗费多余材料即可永久保存等等。本文基于Linux操作系统系统,使用Qt图形编程工具的软件开发。

Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。它不仅实现了画图板的画直线、画圆、画曲线、画矩形、画正方形等各种基本画图功能及其相关属性设置,并且实现了填充图等各种基本画图功能,更达到界面友好方面用户使用的效果。

1 Qt电子画板的总体设计

Qt电子画板采用Qt图形界面编程,使用四线电阻触摸屏ADS7843作为画板(见图1),通过USB口与PC连接,组合而成一个可以在画板上随意作图,计算机轻松实现的绘图工具。除了作图的功能外,该电子画板还可以实现对已有图片进行修改保存,创建新图片以及改变图片大小等常规绘图软件可以实现的功能。

图1 绘图板

2 四线电阻屏

典型触摸屏的工作部分一般由3部分组成:两层透明的阻性导体层、两层导体之间的隔离层以及电极。如图2所示。

图2 触摸屏结构图

导体层选用阻性材料,如铟锡氧化物(ITO)涂在衬底上构成,上层衬底用塑料,下层衬底用玻璃。隔离层为粘性绝缘液体材料,如聚脂薄膜。电极选用导电性能极好的材料(如银粉墨)构成,其导电性能大约为ITO的1000倍。

触摸屏工作时,上下导体层相当于电阻网络,如图3所示。

图3 工作时的导体层

当某一层电极加上电压时,会在该网络上形成电压梯度。如有外力使得上下两层在某一点接触,则在电极末加电压的另一层可以测得接触点处的电压,从而知道接触点处的坐标。比如,在顶层的电极(X+,X-)上加上电压,则在顶层导体层上形成电压梯度,当有外力使得上下两层在某一点接触,在底层就可以测得接触点处的电压,再根据该电压与电极(X+)之间的距离关系,知道该处的X坐标。然后,将电压切换到底层电极(Y+,Y-)上,并在顶层测量接触点处的电压,从而知道Y坐标。

采用典型的四线电阻式触摸屏ADS7843,其主要特点是精确度高,不受环境干扰,适用于各种场合。控制器为四线电阻式触摸屏通用的ADS7843控制芯片,具有12位转换精度, 支持SPI通讯协议; 内建512KByte ROM,提供繁体或简体中文,支持2 Page 显示模式,支持文本显示和图形显示(320×240点)两种方式,显示模块内建有512KByte的16×16中文显示字型ROM (Font ROM)与8×6的ASC II半型字型,除内建8×16和16×16 的字号外,还提供字型放大的功能。

ADS7843串行接口的一次完整操作需要3×8=24个DCLK时钟周期,前8个脉冲接收8位的命令,并在第6个脉冲的上升沿开始A/D转换器进入采样阶段,从第9个脉冲开始进入转换阶段,输出12位采样值,转换结束进入空闲阶段。直到24 个DCLK结束, CS置高电平,一次测量结束。如图4所示。

图4 ADS7843串行接口的一次完整操作时钟周期示意图

当用户在触摸屏上的有效区域内点击时,触摸屏的X方向、Y方向输出电阻分别随X和Y呈线性变化,ADS7843控制器将其分别转换为12位数据,通过中断告知C8051F020需要接收数据,C8051F020接收到数据后进行处理;首先进行触点数据是否有效判断,包括两方面:一是判断是否误操作,即是否是由于人的抖动产生的错误数据;二是ADS7843传过来得数据是否有效。由于刚开始的传过来的第一个坐标是用户开始接触触摸屏时产生的,电阻不准确,导致数据也不准,通常要去掉;在接收过程中采用多次平均的方法,假如有一次接收的数据和平均值差别很大,则这次测量就作废,需要重新测量。一旦数据有效, C8051F020接着计算触点坐标落在液晶屏的位置,根据计算的结果判断执行相应的功能函数。使触摸屏和液晶屏有机的结合起来,建立一定的逻辑关系,交互地进行信息存取和输出。流程图如图5所示。

图5 流程图

3 软件实现

程序基本框架如图6所示;绘图窗口的实现流程图如图7所示。

图6 程序基本框架

图7 绘图窗口的实现流程图

4 关键技术

4.1 双缓存

双缓冲技术是GUI 编程中常用的技术。所谓的双缓冲就是把需要绘制的控件保存到一个图像中,然后在把图像拷贝到需要绘制的控件上。在Qt 的早期版本中,为了用户界面更加清爽,经常用这个技术来消除闪烁。

在Qt4中,所有的窗口部件默认都使用双缓冲进行绘图。使用双缓冲,可以减轻绘制的闪烁感。在有些情况下,用户要关闭双缓冲,自己管理绘图。下面的语句设置了窗口部件的Qt::WA_PaintOnScreen属性 ,就关闭了窗口部件的双缓冲。

由于Qt4不再提供异或笔,组合模式QPainter::CompostionMode_Xor()并不是异或笔,Qt4只提供了QRubberBand实现矩形和直线的绘图反馈。因此要实现在绘图中动态反馈必须使用其他方法。程序中使用双环冲来解决这个问题。在绘图过程中,一个缓冲区绘制临时内存,一个缓冲区保存绘制好的内容,最后进行合并。在交互绘图过程中,程序将图像缓冲区复制到临时缓冲区,并在临时缓冲区上绘制,绘制完毕在将结果复制到图像缓冲区,如果没有交互复制,则直接将图像缓冲区绘制显示到屏幕上。

4.2 种子填充算法

种子填充算法又称为边界填充算法。其基本思想是:从多边形区域的一个内点开始,由内向外用给定的颜色画点直到边界为止。如果边界是以一种颜色指定的,则种子填充算法可逐个像素地处理直到遇到边界颜色为止。种子填充算法常用四连通域和八连通域技术进行填充操作。

从区域内任意一点出发,通过上、下、左、右4个方向到达区域内的任意像素。用这种方法填充的区域就称为四连通域;这种填充方法称为四向连通算法。从区域内任意一点出发,通过上、下、左、右、左上、左下、右上和右下八个方向到达区域内的任意像素。用这种方法填充的区域就称为八连通域;这种填充方法称为八向连通算法。

一般来说,八向连通算法可以填充四向连通区域,而四向连通算法有时不能填充八向连通区域。例如,八向连通填充算法能够正确填充如图8(a)所示的区域的内部,而四向连通填充算法只能完成如图8(b)的部分填充。

图8 填充法示意图

四向连通填充算法:

a)种子像素压入栈中;

b)如果栈为空,则转e);否则转c);

c)弹出一个像素,并将该像素置成填充色;并判断该像素相邻的四连通像素是否为边界色或已经置成多边形的填充色,若不是,则将该像素压入栈;

d)转 b);

e)结束。

5 结论

5.1 运行界面

运行界面如图9所示。

5.2 可实现的主要功能

它可以完成自由线的绘制如图10(a)所示,圆形,直线以及椭圆的绘制如图10(b)所示,以及改变画笔粗度如图10(c)所示,填充颜色如图10(d)所示等等的辅助功能。

图9 运行界面

图10(a)自由线的绘制

图10(b) 圆形,直线,椭圆的绘制

图10(c) 画笔加粗

图10(d) 改变画笔颜色

[1]陈英,梁建武.Linux 基础及应用教程[M].北京:水利水电出版社,2008:29-42.

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

[3]丁林松,黄丽琴. QT4 图形设计与嵌入式开发[M].北京:人民邮电出版社,2009:45-69.

[4]金西,黄汪.嵌入式 Linux 技术及其应用.计算机应用[J],2000,20(7):5-6.

[5]刘峥嵘.嵌入式Linux应用开发详解[M].北京:机械工业出版社,2004:53-68.

[6]林锐,韩永泉.高质量程序设计指南:C++、C语言[M].北京:电子工业出版社,2007:124-155.

[7]倪继利.QT以及linux操作系统窗口设计[M].北京:电子工业出版社,2006:45-152.

[8]钱能.C++程序设计教程[M].北京:清华大学出版社,2006:56-88.

[9]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2006.

[10]谭浩强.C++面向对象程序设计[M].北京:清华大学出版社,2006,89-100.

[11]王子强,刘海燕,李媛州.Linux下图形用户界面程序的开发与实现[J].计算机应用与软件,2005.

[12]谢春,陶烨,瞿坦.基于嵌入式Linux系统的多进程图形用户界面GUI系统研究[J].工业控制计算机,2003(5):28-29.

猜你喜欢

图形用户界面缓冲区画板
嵌入式系统环形缓冲区快速读写方法的设计与实现
图形用户界面外观设计专利保护问题探析——以“奇虎诉江民案”为例
浅谈图形用户界面(GUI)技术专利现状
图形用户界面法律保护问题与对策
七彩画板
七彩画板
七彩画板
七彩画板
关键链技术缓冲区的确定方法研究
地理信息系统绘图缓冲区技术设计与实现