(计算机系统结构专业论文)嵌入式linux环境下蒙文编辑器的设计与实现.pdf_第1页
(计算机系统结构专业论文)嵌入式linux环境下蒙文编辑器的设计与实现.pdf_第2页
(计算机系统结构专业论文)嵌入式linux环境下蒙文编辑器的设计与实现.pdf_第3页
(计算机系统结构专业论文)嵌入式linux环境下蒙文编辑器的设计与实现.pdf_第4页
(计算机系统结构专业论文)嵌入式linux环境下蒙文编辑器的设计与实现.pdf_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内蒙古大学硕士学位论文 嵌入式l i n u x 环境下蒙文编辑器的设计与实现 摘要 近年来,随着计算机技术的迅速发展,嵌入式系统开发己经成为信息产业的 热点。在嵌入式的开发过程中,友好的多媒体人机界面为嵌入式产品的开发提 出了新的挑战。 由于民族、文化的多样性,不同用户的书写习惯也不尽相同。因而计算机 需要为不同的用户提供不同的界面,以符合他们的使用习惯。目前,能在嵌入 式环境下使用的蒙文的编辑器很少,这给使用嵌入式设备处理蒙文信息的用户 带来了不便。 本文使用q t 设计并实现了一个蒙文编辑器。该编辑器能在基于a r m 的嵌入 式l i n u x 目标平台上运行,实现了文本的竖排显示。编辑器具有选择、剪切、 复制、粘贴、删除等功能,可以对字体、字号、文字颜色、显示比例等进行设 置。 本文所做主要工作如下:分析q t 4 3 2 源代码中文本处理相关代码,熟悉 其文本处理机制;安装q t 桌面运行环境,设计蒙文编辑器的架构;搭建目标机 环境,包括烧写开发板引导程序、操作系统内核、文件系统等;配置宿主机交 叉编译环境,最终将交叉编译后的程序下载至目标平台,并运行。 关键词:嵌入式l i n u x ,o t ,蒙文编辑器,竖排,a r m 嵌入式l i n u x 环境下蒙文编辑器的设计与实现 d e s i g na n di 田l e 正n t a t i o no fm o n g o l i a n s t y l ee d i t o ri ne m b e d d e d l 肌丁xe n v i r o n n 匝n t a bs t r a c t ,i n r e c e n ty e a r s ,w i t ht h ef a s td e v e l o p i n go fc o m p u t e rt e c h n o l o g y , r e s e a r c ho n e m b e d d e ds y s t e mh a sb e e no n eo ft h ei n f o r m a t i o ni n d u s t r y sl i o t s p o t s i nt h ep r o c e s s o fd e v e l o p i n ge m b e d d e ds y s t e m s ,h o wt oa c h i e v ea f r i e n d l yh u m a n - c o m p u t e r i n t e r f a c eb r i n g sn e w c h a l l e n g e s a sar e s u l to fm u l t i p l i c i t yo fn a t i o n a lc u l t u r e s ,d i f f e r e n tu s e r sh a v ed i f f e r e n t w r i t i n gh a b i t s h e n c e ,t h ec o m p u t e rn e e d s t op r o v i d ed i f f e r e n ti n t e r f a c e st om e e tt h e i r n e e d s n o w a d a y s ,t h e r ea r ef e we d i t o r st h a ts u p p o r tm o n g o l i a nw r i t i n gs t y l ei n e m b e d d e ds y s t e m s i t b r i n g sm u c hi n c o n v e n i e n c et ot h eu s e r sw h od e a lw i t h m o n g o l i a ni n f o r m a t i o nu s i n ge m b e d d e ds y s t e m s i nt h i sp a p e r , a ne d i t o rt h a ts u p p o r t sm o n g o l i a ns t y l ew r i t i n gh a b i ti sd e s i g n e d a n di m p l e m e n t e db yq t t h ee d i t o rr u n so ne m b e d d e d l i n u xp l a t f o r mb a s e do na r m p r o c e s s o r , a n di m p l e m e n t sav e r t i c a lt y p e s e tm e t h o d i tp r o v i d e sf u n c t i o n a l i t i e st o s e l e c t ,c u t ,c o p y , p a s t e ,a n dd e l e t et e x t ,a n da l s oc a ns e tt h ef o n tt y p e ,f o n ts i z e ,c o l o r a n dd i s p l a ys c a l e t h ed e s i g na n di m p l e m e n t a t i o ni n c l u d ef o l l o w i n gs t e p s :a n a l y z i n gt h es o u r c e c o d eo fq t 4 3 2 ,f a m i l i a rw i t ht h et e x tp r o c e s s i n gm e c h a n i s m ;a n di n s t a l l i n gt h e o p e r a t i n g e n v i r o n m e n to fq t s d e s k t o p ,d e s i g n i n gt h ee d i t o r sf r a m e w o r k ;t h e n b u i l d i n gt a r g e tm a c h i n ee n v i r o n m e n tw h i c hi n c l u d e sl o a d i n gb o o ts y s t e m ,k e r n e l s s t a r t u p ,d e v i c ed r i v e ra n df i l es y s t e m ;f i n a l l yc r o s s c o m p i l i n gt h es o u r c ec o d eo f e d i t o ra n d r u n n i n go nt a r g e tp l a t f o r m k e y w o r d s :e m b e d d e d - l i n u x ,q t ,m o n g o l i a ns t y l ee d i t o r ,v e r t i c a lt y p e s e t ,a r m 内蒙古大学硕士学位论文 图表目录 图1 1蒙文字符“之,的不同显现形式2 图2 1 信号槽示意图:5 图2 2 图形文本条目布局二l 6 图2 3图形文本条目旋转6 图2 4 系统绘制与自行绘制对比7 图2 5 显示一列文本8 图2 6 显示两列文本8 图2 7 显示三列文本9 图3 1鼠标点击转换1 3 图3 2鼠标选择1 4 图3 3正向选择1 4 图3 4 反向选择15 图3 5 菜单栏和工具栏按钮同步。1 6 图3 6 文件菜单。1 6 图3 7 编辑菜单1 8 图3 8 格式菜单1 9 图3 9 帮助菜单。2 0 图3 1 0 工具栏的活动区域2 0 图3 1 1字体组合框21 图3 1 2 字号组合框2 2 图3 1 3 显示比例2 3 图3 14 字体颜色对话框2 4 图4 1 格式化f l a s h 存储器2 8 图4 2 烧写v i v i 一2 8 图4 4 烧写r o o t 2 9 图4 5 烧写q t o p i a 3 0 图4 6i n t e l 平台使用的库3l v 嵌入式l i n u x 环境f 蒙文编辑器的设计与实现 图4 7q t 4 界面31 图4 8a r m 平台使用的库i 3 3 图4 9n f s 配置3 4 图4 1 0 程序运行效果图3 6 表3 1编辑器使用的q t 类1 0 表3 2 信号槽实现功能2 5 v i 原创性声明 本人声明:所呈交的学位论文是本人在导师的指导下进行的研究工作及取得的研究成果。除本文已经 注明引用的内容外,论文中不包含其他入已经发表或撰写过的研究成果,也不包含为获得卤鏊查太堂及其 他教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作 了明确的说明并表示谢意。 学位论文作者签名:垒幽 日 期:冱壁:左:翌 指导教师签名:她姒 日 期:卫旦墨:p 在学期间研究成果使用承诺书 本学位论文作者完全了解学校有关保留、使用学位论文的规定。即:内蒙古大学有权将学位论文的全 部内容或部分保留并向国家有关机构、部门送交学位论文的复印件和磁盘,允许编入有关数据库进行检索, 也可以采用影印、缩印或其他复制手段保存、汇编学位论文。为保护学院和导师的知识产权,作者在学期 间取得的研究成果属于内蒙古大学。作者今后使用涉及在学期间主要研究内容或研究成果,须征得内蒙古 大学就读期间导师的同意;若用于发表论文,版权单位必须署名为内蒙古大学方可投稿或公开发表。 学位论文作者签名;壅墩指导教师签名:鬟螳 日期:碰:笸:! 翌日 期:趔孕:么:z 垒 内蒙古大学硕上学位论文 1 1 研究背景 第一章绪论 随着计算机技术的迅猛发展及日益普及,计算机给人们的工作和生活带来了无穷乐趣和 一:一 方便,与此同时人们对计算机的功能要求越来越高,计算机在少数民族文字处理方面的一些 缺陷和不足也就凸现出来。例如:在使用计算机处理蒙古文、锡伯文等少数民族的文字信息 时,由于这些少数民族的书写习惯是竖直方向从左向右,而现有的计算机虽能实现竖直方向 从右向左的排版方式,但对于竖直方向从左向右的排版方式还不能很好的支持,这将会给用 户带来不便。如何符合蒙古文、锡伯文等少数民族的书写习惯给计算机文本处理排版方式提 出了新的挑战。 蒙文字库与一般字库不同:字库中的蒙文字符是逆时针旋转9 0 度后存放的。目前, w i n d o w s 操作系统下显示竖直排版的蒙文字符时,利用w i n d o w sa p i 函数将字符顺时针旋转 9 0 度后输出。而l i n u x 操作系统不支持字符旋转,只能按字库中的字符原样直接显示输出, 这将导致显示的蒙文字符都是“躺着 的。 l i n u x 以其开放性受到了各国政府和世界的普遍认可,从桌面到服务器,从嵌入式系统到 信息安全领域等各个方面得到了广大用户的支持。目前,大多数嵌入式设备使用l i n u x 操作 系统,而该系统不支持字符旋转,这给使用嵌入式设备处理蒙古文、锡伯文等少数民族的文 字信息的用户带来了不便。嵌入式设备缺乏对竖直排版的支持一定程度上阻碍了嵌入式技术 在少数民族地区的发展。 在嵌入式设备上实现蒙文编辑器是为了解决计算机处理蒙文信息时遇到的显示问题,它 涉及到人机交互、文本处理等诸多方面。本设计的首要目的是使用户在嵌入式设备上更容易 处理蒙文信息。实现该编辑器对提高系统的友好性、可用性和易用性等方面都有很重要的意 义,对满足蒙古族用户和使用与传统蒙古文书写习惯相同的其它少数民族用户的需求也是意 义深远【1 1 。 1 2 蒙古文字信息处理概述 1 2 1 蒙古文特点 现行蒙古文分为三种;蒙古文、托忒蒙古文和新蒙古文。蒙古文属于阿尔泰语系,是一 嵌入式l i n u x 环境下蒙文编辑器的设计与实现 种拼音文字。蒙古文的字典排序严格按照字母排列顺序进行。蒙古文的拼写规则是以词为单 位,词与词之间用空格分开,词内各个字母之间无空格。总的书写规则是,行内从上向下, 行间从左向右。每一个字母在词首、词中、词尾有不同的变体,有的变体有多种形式。例如 蒙语字符“之 的不同显现形式如图1 1 所示。所以,三十几个字母有一百多种书写变体形 式。这些变体字母的形状各异,存在着一字多形、多字同形的现象。这些特点给蒙古文信息 处理事业带来了许多困难i z j 。 拿 拿 l 、- 图1 1 蒙文字符。之”的不同显现形式 f i g u r e1 1 d i f f e r e n td i s p l a yf o r m a to fm o n g o l i a nc h a r a c t e r “己” 1 2 2 蒙古文字信息处理现状 我国计算机信息处理少数民族文字工作首先就是从蒙古文开始的。8 0 年代就在计算机上 实现了蒙古文信息处理系统,为内蒙古自治区为主的8 个使用回鹘蒙古文的省区推广应用计 算机处理蒙古文信息创造了良好的条件。后来又先后开发了与蒙古语文研究有直接关系的多 种文字系统( 传统蒙文、回鹘文、托忒文、八思巴文、新蒙文、布里亚特文等) 、蒙文词类分 析研究系统、词典编纂系统、传统蒙文转译系统、激光排版系统、蒙古作家用语风格分析系 统、蒙文图书管理系统、蒙医诊断系统、蒙文电视字幕系统、汉蒙对照名词术语编纂系统、 蒙文w i n d o w s 操作系统、蒙文矢量字库及蒙汉文混排软件等2 0 多种应用系统【3 j 。 目前,在w i n d o w s 操作系统下已经存在一些能够处理蒙文信息的编辑器,但它们大多不 具有跨平台性,不能应用于嵌入式系统。而l i n u x 操作系统下能够处理蒙文的编辑器很少, 能够在嵌入式环境下使用的蒙文编辑器就更是少之又少,这给使用嵌入式设备处理蒙文信息 的用户带来不便。本论文的目的就是为满足使用嵌入式设备处理蒙文信息的用户的需求。 1 3 l i n u x 操作系统对文本竖排的支持现状 目前l i n u x 上有两个流行的桌面系统k d e 和g n o m e ,虽然他们都是基于xw i n d o w 系统 之上,但是使用不同的机制和函数库来实现文本的显示和编辑。 2 堕鍪直奎堂堡主堂篁笙茎 在g n o m e 桌面环境中,所有的文本绘制操作都是通过一个称为p a n g o 的函数库来实现的, 它的目标是为多语言文本的绘制和布局提供一个开源的框架,它完全支持u n i c o d e 标准,并 支持阿拉伯文、希伯来文、泰文、印地文等复杂文字,目前被广泛应用于g t k + g n o m e 应用 程序中,而且它为文本绘制方向( 从左向右,从右向左,垂直方向从左向右,垂直方向从右 向左) 提供了接1 :3 ,但并没有实现垂直方向从左向右和垂直方向从右向左绘制和编辑的功能。 在k d e 桌面环境中,所有的应用程序都基于q t 库,因而文本绘制的底层操作也是由q t 库来完成的。q t 是一个跨平台的c + + 图形用户界面应用程序开发工具包,使用q t 可以开发 出高质量的图形用户界面程序,它是完全面向对象的、易于扩展且允许真正的组件编程。q t 完全支持u n i c o d e 标准,实现了对阿拉伯文、泰文、希伯来文、印地文等复杂文字的支持, 但也无法实现垂直方向从左向右的显示【l 】。 1 4 论文组织结构 本论文共由五章组成。 第一章为绪论,主要介绍了本设计的研究背景、蒙古文信息处理概述和l i n u x 操作系统 对文本竖排的支持现状。 第二章介绍了本设计使用的软件平台,提出了编辑器的设计方案。 第三章介绍了编辑器的实现过程,包括文字显示、鼠标响应的处理,界面设计和编辑器 的跨平台性等内容。 第四章介绍了编辑器的移植过程,包括目标机环境的搭建、q t 桌面运行环境的安装及交 叉编译和移植的过程。 最后一章总结了本文所做的工作,对编辑器的不足提出改进方案,并对今后工作做出展 望。 3 嵌入式l i n u x 环境下蒙文编辑器的设计与实现 第二章编辑器的开发平台及设计方案 2 1 软件平台简介 q t 是t r o o l l t e c h 公n t 4 1 的一个跨平台的图形用户界面应用程序开发工具包,它是完全面向 一: 对象的、易于扩展且允许组件编程。q t 的文本处理是通过多个封装良好的类相互协作来实现 的。q t 完全支持u n i c o d e 标准,对很多复杂文字有很好的支持。自从1 9 9 6 年早些时候,q t 进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。q t 也是流行的l i n u x 桌面环境k d e 的基础,k d e 是所有主要的l i n u x 发行版的一个标准组件。本设计使用的q t 版本为4 3 2 。 2 1 1 q t 支持的平台 q t 4 3 2 版本支持以下平台: w i n d o w s 9 5 、9 8 、2 0 0 0 、n t4 0 、m e 、和x p u n i x x 11 - l i n u x ,s u ns o l a r i s ,h p u x ,c o m p a qt r u 6 4u n i x ,i b ma i x ,s g ii r i x 和其它很多x l l 平台 m a c i n t o s h m a co sx e m b e d d e d 有帧缓冲( f r a m e b u f f e r ) 支持的l i n u x 平台。 2 1 2 q t 的版本 q t 有以下版本: q t 企业版和q 专业版提供给商业软件开发。它们提供传统商业软件发行版并且提供 免费升级和技术支持服务。 q t 自由版是q t 为了开发自由和开放源码软件提供的u n i x x l l 版本。在q 公共许可 证和g n u 通用公共许可证下,它是免费的。 q t 嵌入式自由版是q 为了开发自由软件提供的嵌入式版本。在g n u 通用公共许可 证下,它是免费的。 2 1 3 q 的信号槽机制 用于对象之间通信的信号槽机制是q t 的重要特征。在q t 中,存在交替的回调技术 4 内蒙古大学硕士学位论文 ( c a l l b a c kt e c h n i q u e ) :信号( s i g n a l s ) 和槽( s l o t s ) 。传统的回调函数机制关联某段代码和一 个按钮,需要有一个指向函数的指针,并且将这个指针地址传给按钮。当这个按钮被按下, 这个函数就会被执行。以前的工具包不能保证函数被执行时所传递的类型是正确的,这使得 进程很容易崩溃。另一个问题是,这种回调方法紧紧的绑定了g u i 的基本功能元素,很难进 行独立的分类开发。q t 的信号槽机制则不同:当部件( w i d g e t s ) 事件发生时,它会发射信号。 例如一个按钮被点击时会发射一个a r i g g e r e d 0 信号。用户可以选择建立一个函数( 此函数称为 槽) 并调用c o n n e c t o i 函数将这个信号和槽连接起来。用户在编程时可以将两个对象捆绑在一 起而不需要知道每个对象各自的信息。用户也可以创建自己的信号和槽,发射自己的信号。 信号槽示意图如图2 1 。 图2 1 信号槽示意图 f i g u r e2 1 s i g n a l sa n ds l o t s 信号槽机制是一种安全的机制:信号的特征一定要匹配接收槽的特征。由于特征是一致 的,编译器能帮助用户探测类型是否匹配。信号和槽是松散耦合的:释放信号的类不知道也 不关心哪个槽接收此信号。q t 的信号槽机制能够确保当信号和槽连接的时候,槽通过信号传 递的参数被调用。 所有继承于q o b j e c t 类和它的子类都包含信号和槽。当对象改变它们的状态以致影响到 其它对象时,信号被释放。这是所有对象都能做的通信,并不需要知道它所释放的信号是否 被接收。这就是信息封装,它使对象作为软件组件使用。 槽可以接收信号,但它也是普通的成员函数。正如对象不知道它的信号是否被接收一样, 槽也不知道是否有信号连接它。这可以确使q 创建完全独立的组件。用户可以将多个信号连 嵌入式l i n u x 环境下蒙文编辑器的设计与实现 接到一个槽上,也可以将一个信号连接到多个槽上,甚至直接将一个信号连接到另一个信号 也是可能的。 2 2 编辑器的设计方案 本编辑器的设计主要应用了q t 的q c n - a p h i c s t e x t l t e m 类5 1 ,它可以支持纯文本和富文本, 允许用户对其进行缩放、旋转以及文档编辑, 设计过程中需要解决文字从左向右垂直显示、 骤如下: 极大的满足了编辑器的设计要求。在编辑器的 光标的闪烁、鼠标的定位等问题,具体实现步 第一步:在图形布景( q g r a p h i c s s c e n e ) 上放置一个图形文本条目( q g r a p h i c s t e x t i t e m ) , 使其在图形布景上左上对齐,实线框表示图形布景,虚线框表示图形文本条目。由于字库中 的蒙文字符相对于字库中的汉字字符旋转了9 0 度,当用户输入蒙文时看到的是“躺着的蒙文 字符 。如图2 2 所示。 图2 2 图形文本条目布局 f i g u r e2 2l a y o u tq g r a p h i c s t e x t l t e m 为了实现蒙文的垂直显示,将图形文本条目顺时针旋转9 0 度,此时看到的蒙古文字符合 人的视觉要求。如图2 - 3 所示。 垂 善 萋 图2 3 图形文本条目旋转 f i g u r e2 3 r o t a t eq g r a p h i c s t e x t l t e m 6 内蒙古大学硕士学位论文 第二步:绘画图形文本条目的内容。当用户书写完一列换行后,图形文本条目新增- y 0 , 系统的文本处理机制会将第- y d 文字显示在第一列的左边( 相当于旋转前第一行文字的下 边) ,这与传统的蒙古文书写方向从左向右不一致。为了符合蒙文书写要求,需要屏蔽系统绘 制,自行绘制文本。编辑器使用q p m n t e r 这个类来自行绘制文本。 图2 4 显示了系统绘制与自行绘制的效果。图中的灰色框表示系统绘制的文本,虚线框 表示自行绘制的文本。图( a ) 和( b ) 分别显示了绘制一列文本和两列文本的情况。 ( a ) ;系系 统统 绘绘 :画画 :第第 j 歹l j列 i自自i ;行行! i 绘绘: :画画 i i 第 第 ; i 列列i q “榭 图2 4 系统绘制与自行绘制对比 、 f i g u r e2 4c o m p a r es y s t e mp a i n tw i t hc u s t o mp a i n t 第三步:确定使用q p a i n t e r 类自行绘制文本的位置。由于编辑器在使用过程中应当有光 标闪烁,而光标的闪烁涉及到系统的刷新区域。对于一个图形文本条目,它的刷新区域就是 这个条目边框的内部,如果在图形文本条目边框的外部从左向右自行绘制文字,就会存在光 标无法闪烁的问题。解决方法是,在图形文本条目边框的内部从左向右自行绘制文字,利用 系统的刷新区域解决光标闪烁的问题。绘制文字的位置是个变量,它随着图形文本条目边框 的大小而改变。绘制的文本应与图形文本条目的内容一致。具体实现如下: 设置自行绘制的区域,使用户在输入第一列文字时,自行的绘制区域与图形文本条目第 一列文字的区域重合。由于系统的刷新区域是图形文本条目边框的内部,这样自行绘制的区 域就是刷新区域,也就实现了光标闪烁,如图2 5 所示,实线框表示图形视窗( q g r a p h i c s v i e w ) , 灰色区域表示系统绘制的图形文本条目区域,虚线框表示自行绘制文字的区域。 图形视窗提供了一个显示图形布景内容的部件,它使图形布景的内容在滚动的视口下可 见。当图形布景上的内容不在图形视窗部件内时,图形视窗自动调整,使图形布景上的内容 可见。当显示一列文本时,图形文本条目在图形视窗内,不需要调整图形视窗。 7 自行绘画第一列 缪尹 一。,;| = 、 :。:,“、,、,#孳纛 w 系绫绘画第一势 爹yt;。;、;,;:;矿?;t阮 嵌入式l i n u x 环境下蒙文编辑器的设计与实现 图2 5 显示一列文本 f i g u r e2 5d i s p l a yo n ec o l u m nt e x t 当用户输入第- y d 文字时,系统绘制的第二列文字出现在第- y u 的左边,不在图形视窗 部件内,如图( a ) 。此时图形视窗会自动将视口位置向左偏移- y u 文本的宽度,使图形文本条 目的内容全部可见,如图( b ) 。由于图形文本条目边框增大,为了自行绘制的第- y d 也在这个 边框内,这就需要使自行绘制文字的位置也向左偏移- y u 文本的宽度,也就是当前字符的高 度,如图( c ) 。图中实线框表示图形视窗( q g r a p h i c s v i e w ) ,灰色区域表示系统绘制的图形文 本条目区域,虚线框表示使用自行绘制文字的区域。 ( a ) ,o ;第第 :一一 ;列列 ( c ) 图2 6 显示两列文本 f i g u r e2 6d i s p l a yt w oc o l u m n st e x t 同理,每当图形文本条目新增一列,自行绘制的区域就会向左偏移,偏移量为当前字符 的高度,这样就使自行绘制的区域始终在图形文本条目的边框内,刷新问题也就解决了,如 图2 7 ,实线框表示图形视窗( q g r a p h i c s v i e w ) ,灰色区域表示系统绘制的图形文本条目区域, 虚线框表示自行绘制文字的区域。 8 内蒙古大学硕士学位论文 彰一 ( a ) ( b ) 图2 7 显示三列文本 f i g u r e2 7d i s p l a yt h r e ec o l u m n st e x t 9 ( c ) 嵌入式l i n u x 环境下蒙文编辑器的设计与实现 第三章编辑器的实现 本设计实现的编辑器能够将蒙文竖直显示,同时具有新建、打开、保存、另存为、退出、 剪切、复制、粘贴、删除、选择、设置字体、字号、字体颜色、显示比例等常见功能。编辑 器主要应用的q t 类及其功能见表3 。1 。 表3 1 编辑器使用的q t 类 t a b l e3 1e d i t o ru s e dq t sc l a s s e s 类名功能 q a c t i o n 菜单的实现 q c o m b o b o x按钮和下拉菜单的组合 q f o n t c o m b o b o x 选择字体名称的组合框 q f o n t m e t r i c s保存字体规格信息 q g r a p h i c s s c e n e 图形布景 q g r a p h i c s s c e n e m o u s e e v e n t 图形布景上的鼠标事件 q g r a p h i c s t e x t l t e m图形文本条目 q g r a p h i c s v i e w 图形视窗 q m a i n w i n d o w提供主要的应用窗口 q m e n u b a r 菜单栏的实现 q p a i n t e r自行绘制文本 q s t a t u s b a r 状态栏的实现 q t e x t c u r s o r提供了访问和修改格式化文本的a p i q t e x t d o c u m e n t 保存格式化文本 q t e x t l a y o u t 绘制和布局段内文本 q t o o l b a r工具栏的实现 3 1 文字显示 3 1 1 竖直显示 本设计主要应用了q t 的图形文本条目( q g r a p h i c s t e x t l t e m ) 、图形布景( q g r a p h i c s s c e n e ) 和图形视窗( q g r a p h i c s v i e w ) 这三个类。图形文本条目可以支持纯文本和富文本,允许用户 对其进行缩放、旋转以及文档编辑;图形布景提供了管理大量二维图形文本条目的接口,它 和图形视窗共同控制图形文本条目如边框、文本的可视化;图形视窗提供了显示图形布景内 容的部件,它使图形布景的内容在滚动的视口上可见。- 1 0 内蒙古大学硕士学位论文 为了实现文本竖直显示,首先在图形布景坐标系的原点上创建一个图形文本条目,然后 将该图形文本条目以图形布景的坐标原点为中心顺时针旋转9 0 度。由于蒙文字符在字库中逆 时针旋转9 0 度存放,当图形文本条目顺时针旋转9 0 度后,文字的显示恰好符合人的视觉要 求,这样就实现了文字的垂直显示,具体实现如下: s c e n e = n e w q g r a p h i c s s c e n e 0 ; 仓, j 建图形布景 s e t w i n d o w t i t l e ( t r ( ”t e x t ”) ) ; :设置标题栏 v i e w = n e wq g r a p h i c s v i e w ( s c e n e ) ; 创建图形视窗 v i e w - s e t v i e w p o r t u p d a t e m o d e ( q g r a p h i c s v i e w :f u l l v i e w p o r t u p d a t e ) ; 更新模式 v i e w - s e t a l i g n m e n t ( q t :a l i g n l e f tq t :a l i g n t o p ) ;l i e 上对齐 s c e n e - t e x t i t e m 一 r o t a t e ( 9 0 ) ;图形文本条目旋转 3 1 2 换行处理 通过图形文本条目的s e t t e x t w i d t h 属性可以设置编辑器- y u 文字的长度。由于文字的字 号不同,一列中能容纳的字数也不同。对于传统的蒙古文,每个字符的高度不同,随着文字 的输入,当一列中剩下的空间不足以存放一个字符时,也就是当文字的长度超过列的长度时 系统会自动换行。 3 1 3 高亮显示 高亮显示是指当用户用鼠标或键盘选择一段文本时,需要更换选择文本的背景色以便获 得突出的视觉效果。选择一段文本实际上就是定位选择文本的起点和终点,系统内部是通过 定位光标的位置决定选择区域的起点和终点的。在确定了选择文本的范围后,就可以绘制该 区域的背景和文字了。本编辑器选择文本的背景和字体颜色可通过q t 中的q t e x t c h a r f o r m a t 类来设置。具体实现如下: t f s e t b a c k g r o u n d ( q b r u s h ( q c o l o r ( 4 9 ,1 0 6 ,1 9 7 ) ) ) ; 设置被选文字背景色为蓝色 t f s e t f o r e g r o u n d ( q b r u s h ( q t :w l l i t e ) ) ; 设置被选字体颜色为白色 3 2 鼠标响应 3 2 1 响应区域 在第二章设计方案的第三步中提到:编辑器自行绘制图形文本条目中的内容,并根据文 本条目边框的区域而改变绘制位置。q t 的q t e x t l a y o u t 类用来布置和绘制段内文本。除了文 嵌入式l i n u x 环境。f 蒙文编辑器的设计与实现 本布局引擎外,它还有具有诸如u r t i c o d e 顺序绘制、断行控制和光标位置处理等特性。本编 辑器的段落处理应用了这个类。首先使用q g r a p h i c s t e x t i t m 类的t o p l a i n t e x t o i 函数将图形文本 条目的内容转换为纯文本字符串,然后用q s t r i n g l i s t 类的s p l i t o 函数将纯文本字符串分割为 若干个字符串列表( q s t r i n g l i s t ) 。分隔过程以自然段为单位分隔,一段就是一个字符串。 q t e x t l a y o u t 对字符串列表中的每个字符串进行处理,根据该段段首的位置开始绘制字符,再 通过获取字符的长度计算下一个字符的位置,直至此段结束。若绘制完当前字符后,计算得 知剩下的空间不足以容纳下一个字符,则换至下一行输出。具体实现如下: t e x t l a y o u t b e g i n l a y o u t 0 ; w h i l e ( 1 ) q t e x t l i n el i n e = t e x t l a y o u t c r e a t e l i n e o ;仓q 建行 i f ( ! l i n e i s v a l i d 0 ) b r e a k ; l i n e s e t l i n e w i d t h ( 4 0 0 ) ; 设置一行的长度 l i n e s e t p o s i t i o n ( q p o i n t ( o ,h e i g h t ) ) ;段内定位 h e i g h t 一= ( i n t ) l i n e h e i g h t ( ) ; t e m p + = l i n e t e x t l e n g t h 0 ; 当前行的长度 ) m y h e i g h t + = h e i g h t ; 段间定位 t e x t l a y o u t e n d l a y o u t 0 ; 3 2 2 点击定位 点击定位是指用鼠标点击屏幕上的某个点,根据该点确定光标位于哪个段落的哪个位置 上。这在文本处理系统中是一个非常基本的操作。水平显示时的定位算法首先根据鼠标点击 的坐标确定光标所在的段落,进而计算出光标所在的行,最后计算出光标的位置。 对于图形文本条目的绘制过程,系统绘制与自行绘制是左右镜像关系( 原理见2 2 节) , 用户的鼠标点击操作实际上是在镜像后的环境中进行的。因此,为利用系统鼠标事件,需要 将用户鼠标点击的位置再次镜像( 即得到与系统绘制一致的坐标) 。例如,用户在所见第- - y d ( 也就是系统绘制的第三列) 点击鼠标,如果直接处理此坐标,则光标会在第三列出现。如 果在处理坐标前对其镜像,则光标就会在第一行出现。该过程如图3 1 所示。 1 2 内蒙古大学硕士学位论文 i 田”礼 礤厂 图3 1鼠标点击转换 f i g u r e3 1 m o u s ec l i c kc o n v o r s i o n 转换鼠标位置的过程如下: 1 ) 截获系统鼠标信号; 2 ) 获取鼠标点击坐标; 3 ) 计算新的坐标位置; 4 ) 将计算出的位置传递给系统。 上述过程的第一步通过重写m o u s e p r e s s e v e n t 、m o u s e m o v e e v e n t 、m o u s e d o u b l e c l i c k e v e n t 、 m o u s e r e l e a s e e v e n t 槽实现。这四个槽都会得到一个q g r a p h i c s s c e n e m o u s e e v e m 类型的参数, 参数中就包含点击的坐标。根据图形文本条目宽度和点击坐标,可以计算出用户欲点击的位 置。例如,鼠标在自行绘制区域点击的坐标为( x ,y ) ,那么转换后的坐标为( x , b o u n d i n g r e e t o h e i g h t o y ) ,其中b o u n d i n g r e c t o h e i g h t o 为图形文本条目边框的高度。最后将 计算出的位置传递给系统完成坐标信息的转换。 3 2 3 选择处理及拖动 在鼠标的操作中涉及两个概念a n c h o r 和p o s i t i o n :a n c h o r ,也叫锚点,选择区域的起始位 置;p o s i t i o n ,选择区域的终止位置。在a n c h o r 和p o s i t i o n 之间的文字即为选择区域。如果a n c h o r 和p o s i t i o n 的值相等,那么说明没有选择区域。只要确定了a n c h o r 和p o s i t i o n 的值,那么选 择区域也就确定了。选择操作可分为向前选择和向后选择。对于向前选择是指鼠标选择文字 的方向从上到下、从左到右,此时a n c h o r 的值小于p o s i t i o n 的值:向后选择是指鼠标选择文 字的方向从下到上、从右到左,此时a n c h o r 的值大于p o s i t i o n 的值。按照选择的范围可分为 段内选择和跨段选择。段内选择是指鼠标选择文字的a n c h o r 位置和p o s i t i o n 位置都在同一段 内;段间选择是指鼠标选择文字的a n c h o r 位置和p o s i t i o n 位置都不在同一段内。本编辑器文 字选择处理的流程图如下: 嵌入式l i n u x 环境下蒙文编辑器的设计与实现 图3 2 鼠标选择 f i g u r e3 2 m o u s es e l e c t i o n 图3 3 正向选择 f i g u r e3 3 s e l e c tf o r w a r d 1 4 内蒙古大学硕士学位论文 3 3 界面设计 3 3 1 菜单栏 图3 4 反向选择 f i g u r e3 4 s e l e c tb a c k w a r d 本编辑器的菜单包括文件菜单( f i l e ) 、编辑菜单( e d i t ) 、格式菜单( f o r m a t ) 和帮助菜单 ( h e l p ) ,它是通过q t 的q a c t i o n 类实现的。q a c t i o n 类提供了抽象的用户界面动作。对于应 用软件,很多通用命令可以通过菜单、工具栏按钮和键盘快捷键调用。把每个命令抽象为一 个动作是很有效的,因为用户希望使用同一种方式来执行界面上不同的命令。动作可以被添 加在菜单栏和工具栏,同时它们会自动的保持同步。例如,对于文本的处理,如果用户按下 工具栏中的斜体按钮,那么菜单栏中斜体选项也会自动的处于按下状态,如图3 5 所示。 q a c t i o n 类包括按钮,菜单文本,快捷键,状态信息和工具栏提示。以创建新建文件菜 单为例,具体实现如下: n e w a c t i o n - - n e wq a c t i o n ( q l c o n ( ”:i m a g e s f i l e n e w p n g ”) ,t r ( ”& n e w ”) ,t h i s ) ;仓j 建新建菜单 n e w a c t i o n s e t s h o r t c u t ( t r ( ”c t r l + n ”) ) ;设置快捷键 n e w a c t i o n 一 s e t s t a t u s t i p ( t r ( ”c r e a t ean e wf i l e ”) ) ;工具栏提示 嵌 式l i n u x 环境下蒙文编辑器的设计与实现 黼 嚼豢= = 罩雷固a 【蟹 囤3 5 菜单栏和工具栏按钮同步 f i g u r e3 5 m e n u b a r a n d t o o l b a r s y n c h r o n i z a t i o n q m e n u b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论