APP下载

基于InterView框架柔性表格组件的设计与实现

2011-03-15孟繁军李慧哲

关键词:错字视图字形

孟繁军, 李慧哲, 林 民

(内蒙古师范大学计算机与信息工程学院,内蒙古呼和浩特 010022)

目前,世界上出现了学习“汉语热”现象,汉语教学和汉语推广工作者发现,学习汉字是汉语学习的瓶颈,而初学汉字者极易将汉字写错[1]。然而,计算机系统中还没有一种对错字进行输入输出及有效管理的可行方案,也没有较好地解决正字与错字同文显示输出、错字深层次处理问题[2]。目前处理错字的方法主要有:利用图片嵌入文本显示输出;利用造字程序制作错字字模和输入法链接实现显示输出[3]。以图片方式显示错字的方法不支持与常用汉字一样的检索和深层次加工处理,而制作字模比较复杂,同时自造错字占用用户预留编码区,可选择的范围有限。文献[4]提出了笔段网格汉字字形描述法,该方法提供了描述一切可能汉字字形(包括错字)骨架的能力,但该方法存在的问题严重影响了在数据库中对错字字形和标注文本的统一交互处理。

本文介绍了一种基于Qt的InterV iew框架的表格组件设计实现方法,可以在表格单元中显示、编辑自定义类型数据,从而实现这些数据的统一布局和交互处理。实际系统使用表明,该表格组件可扩展性强,对多类型数据统一布局处理界面的设计和实现、建立复杂交互处理应用[5,6]具有实用意义。

汉字网格字形是一种采用平面网格结构来描述汉字字形本质特征的形式化方法。网络结构描述定义为:汉字字形网格[7]是由n×n个小正方形组成的大正方形;每个小正方形区域内含有28个笔段;各顶点到它所在边中点的连线共8段;各顶点到它对边中点的连线,以连线中点为界分为2个笔段,共16段;对角线以中点为界分为2个笔段,共4段;整个网格有24n2+4n个笔段;网格中的每个笔段可以取有线和无线2种状态,所有有线笔段分布构成了汉字的笔段网格字形。

实验表明,n=12时,可以表示绝大多数汉字的字形;n=16时,可以表示所有的字形。例如“爨”采用16×16的网格字形描述,如图1所示。

图1 笔段网格字形描述及举例

1 In terView框架简介

InterView是 Q t4.0推出的一个类似于MVC模型的框架[8,9],主要由模型(M odel)、视图(V iew)和代理(Delegate)3部分组成,其结构如图2所示。

图2 InterView框架结构

模型(M odel)和数据源(Date Source)通信,并为其它部件提供接口。视图的主要功能是负责把数据按布局要求(表格、树型等)展示给用户,也处理用户的编辑和输入,它从模型中获得模型索引(M odel Index),通过模型索引来引用要显示的数据条目。视图通过代理来绘制数据条目,当编辑条目时,代理和模型直接进行通信。数据发生改变时,模型发出信号通知视图,若用户对界面进行了操作,视图则发出信号通知代理,代理再发出信号告知模型和视图目前的状态。

InterView模型定制的结构与其它一些工具的组件相比,具有更大的灵活性和可扩展性,并且用户可以通过代理的代码完成自定义数据类型的绘制,因此,对于软件界面按统一布局实现矢量图形的显示、自定义类型数据的处理就更加灵活多样。在传统的开发工具中提供的控件,比如微软的表格控件(Grid),由于采用数据、绘制和布局显示一体化的方式,所以只有对系统预定义的类型才能显示在表格的数据项中,而非标准的一些数据类型很难在表格上以统一布局来显示相应的内容。

在实际应用中,利用Q t中的M odel/V iew架构,程序员重新编写代理类的paint函数后,就可以在Q t的表格组件的单元格上显示出一些非预定义类型的数据项,比如位图、各种矢量图形数据、特殊字形等。本文正是通过Q t的这种代理类机制,很好地解决了在Qt表格中按统一布局风格绘制位图、网格字形及文本的功能。

2 表格中绘制自定义类型的方法

根据InterView模型可知,在Q t下实现绘制自定义类型或特殊类型的数据项时,需要分别设计代理类,并重写paint函数和sizeH int函数,定义模型获取数据源,最后通过代理类完成视图中相应内容的绘制。本文以在表格(QTableView)视图中实现定制表格组件绘制为例,说明在视图中定制组件的技术方法。

2.1 重载Delegates类的paint函数

代理负责管理项目的输入和项目的绘制,Qt中使用抽象类QAbstractItemDelegate作为代理类的基类,大部分情况下,可以直接从Qt已经实现的通用QItemDelegate类继承,这样可以使用它提供的上述函数的缺省实现,以减少代码量。

在本例中,由于数据源提供给模型的数据存放在数据库中,因此,使用继承于QItemDelegate类的QSq lRelationalDelegate派生出新的代理类hzTableDelegate。同时,为了实现定制组件的绘制,必须重新实现paint函数。paint函数完成了从数据库读取相应的矢量数据后,按照对应的显示区域,在QTableView中指定的位置重新绘制出信息结果,同时对于存储在计算机的位图等图形信息也可以通过paint重新绘制。具体实现的主要代码[10]为:

2.2 模型的实现

模型为视图和代理提供了标准的接口。Qt中所有模型都是基于QAbstractItemM odel派生的。当数据改变时,模型发出信号通知视图。为了保证数据的存取和表示分离,InterView引入了模型索引的概念,每个数据条目通过模型索引来获取,视图和代理使用索引来存取数据。

如果要实现自定义的模型,可以从通用的QAbstractItemM odel类继承,也可以从类QAbstractListModel与 QAbstractTableModel继承实现列表模型或表格模型。实现自定义模型必须实现基类的纯虚函数和其它一些特定函数。当实现一个模型时,QAbstractItemModel本身不存储任何数据,它仅仅提供了视图访问数据的接口。

另外,无论底层的数据结构采取何种形式,通过在特定的模型中实现标准的QAbstractItem-M odel的函数,达到以更自然的方式对底层的数据结构进行访问,因此,用数据构建模型更为容易,对于其它的模型/视图组件也可以使用标准的接口与之进行交互。

本例中,由于数据存储在关系数据库中,所以没有自定义模型,而是直接使用Qt提供的QSq l-RelationalTableM odel类生成M odel模型,它和QAbstractItemM odel的继承关系如图3所示。

图3 QSqlRelationalTableModel继承关系图

程序中主要代码为:

以上程序代码运行的效果如图4所示。

图4 示例程序运行效果

图4中用圆角矩形标注的2列中,网络字形列为绘制的特殊形状汉字,标记列为绘制的位图。

3 结束语

文中方法的实现程序在 Window s XP+ Qt4.5环境下调试通过。本文利用Q t的Inter-View框架,实现了在表格组件上绘制自定类型数据的一种方法,该方法为在开发复杂界面应用程序中实现统一布局、建立一致性的交互接口提供了一种非常灵活、有效的途径。目前,应用该表格组件开发的一套汉字错字字形库系统以统一风格显示、编辑错字字形、位图及标注文本等信息,取得了较好的效果。

本文初稿首次刊登于《计算机技术与应用进展◦2010》

[1] 梁彦民.汉字部件区别特征与对外汉字教学[J].语言教学与研究,2004,(4):76-80.

[2] 张问银,孙星明,曾振柄,等.汉字数学表达式的自动生成[J].计算机研究与发展,2004,41(5):848-852.

[3] 林 民,韩冬妹,宋 柔.基于GDI+路径技术的汉字笔顺和部件自动绘制[J].计算机应用研究,2007,24(8): 228-230.

[4] 林 民,宋 柔.一种面向构形计算的汉字字形形式化描述方法[J].中文信息学报,2008,22(3):115-123.

[5] Lee C,Helal S,Lee W.Universal interactions w ith smart spaces[J].IEEE Pervasive Computing,2006,5(1): 16-21.

[6] Apitz G,Guimb retière F,C ross Y.A crossing-based drawing application[C]//Proceedings of the 17th Annual ACM Symposium on User In terface Softw are and Technology,San ta Fe,NM,USA,October 24-27,2004:3-12.

[7] 王建平,陈正伟,栾庆磊,等.基于多群遗传算法的汉字识别系统设计 [J].合肥工业大学学报:自然科学版,2010,33(1):42-46.

[8] Hartness K.Graphics and user in terfaces in C++w ith Qt [J].Jou rnal of Compu ting Sciences in Colleges,2005,20(4):198-199.

[9] 蔡志明,卢传富,李立夏.精通Qt 4编程[M].北京:电子工业出版社,2008:366-396.

[10] Nokia Corporation.Qt reference documentation[DB/OL]. [2010-03-20].http://qt.nokia.com/doc/4.6/index.h tm l.

猜你喜欢

错字视图字形
易错字 来提醒
错字在身边
甲骨文“黍”字形义考
甲骨文中的字形直立化二则
60秒找错字
60秒找错字
复习生字字形的方法
5.3 视图与投影
视图
Y—20重型运输机多视图