基于qt的嵌入式终端应用程序开发设计---记事本和电子相册开发内容摘要:

,业界已经达成共识:即嵌入式 linux 是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。 Qt开发工具简介 Qt主要特性 Qt 是一个跨平台的 C++图形用 户界面库,由挪威 TrollTech 公司开发,目前包括Qt/X1基于 Framebuffer 的 Qt/Embedded、快速开发工具 Qt Designer 以及国际化工具Qt Linguist 等。 人们所熟知的 Linux下面的 KDE 环境就是基于 Qt开发而成的。 Qt支持Unix和 Linux系统以及 Windows 系统。 Qt 的主要特点有: 面向对象, 很容易扩展, 并且允许真正的组件编程; Qt对各个模块进行了良好的封装,使各模块可重用性较好;优良的跨平台特性, 使用 Qt 类编写的程序可以实现 “一次编码,到处编译 ”, 极大的降低了跨平台开发的难度(丁丁等, 2020);构件支持, 对于对象间通信, Qt 没有采用函数回调的方法,而是采用了一种全新并且可选的被称为 “信号与槽 ” 的对象间通信机制,通过一个对象信号的发射,另一个槽函数的响应,使各个对象之间的通信安全而且高效。 Qt 的这些特点使它非常适合于真正的构件编程, 同时使各个组件之间的协同工作变得十分简单,并且 Qt是直接基于 Xlib 的,不依赖 Motif 工具包, 所以它的执行效率比一般的基于平台的代码的执行效率要高。 华中农业大学本科毕业论文(或设计) 5 Qt编程机制简介 ( 1) Qt 系统的信号与槽机制简介 信号 /槽机制是 Qt 的一个中心特征并且也许是 Qt 与其它工具包的最不相同的部分。 在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件 (张娟,张雪兰 ,2020)。 更一般地,我们希望任何一类的对象可以和其它对象进行通讯。 较老的工具包使用一种被称作回调的通讯方式来实现同一目的。 回调是指一个函数的指针,所以如果你希望一个处理函数通知你一些事件,你可以把另一个函数(回调)的指针传递给处理函数。 处理函数在适当的时候调用回调(倪继利, 2020)。 回调有两个主要缺点。 首先他们不是类型安全的。 我们从来都不 能确定处理函数使用了正确的参数来调用回调。 因此容易造成进程崩溃,另外一个问题是,回调这种方式紧紧的绑定了图形用户接口的功能元素,因而很难把开发进行独立的分类。 Qt 的信号与槽机制是不同的。 Qt 的信号与槽均以函数形式出现, Qt 的窗口部件有很多预定义的信号,但我们也可以通过继承来加入我们自己的信号。 槽就是一个可以被调用处理特定信号的函数。 Qt 的窗口部件有很多预定义的槽,但是通常的习惯是你可以加入自己的槽,这样你就可以处理你所感兴趣的信号。 我们可以用 connect()函数对需要的信号和槽进行连接。 当对象的内部状态 发生改变,信号就被发射。 从某种意义上讲,它们也许对外面的世界感兴趣。 这就是所有的对象通讯时所做的一切。 它不知道也不注意无论有没有东西接收它所发射的信号。 当一个信号被发射,它所连接的槽会被立即执行,就像一个普通函数调用一样(见图 1)。 信号 /槽机制完全不依赖于任何一种图形用户界面的事件回路。 当所有的槽都返回后发射的信号也将返回。 信号与插槽机制并不要求类之间互相知道细节,这样就可以相对容易的开发出代码可高重用的类 (Matthias Dalheimer,2020)。 信号和槽的机制是类型安全的:一个信号的签名必须 与它的接收槽的签名相匹配。 (实际上一个槽的签名可以比它接收的信号的签名少,因为它可以忽略额外的签名。 )因为签名是一致的,编译器就可以帮助我们检测类型不匹配。 它以警告的方式报告类型错误,而不会使系统产生崩溃。 信号和槽是宽松地联系在一起的:一个发射信号的类不用知道也不用注意哪个槽要接收这个信号 (Johan Thelin,2020)。 Qt 的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。 信号和槽可以使用任何数量、任何类型的参数。 它们是完全类型安全的:不会再有回调核心 转储 (core dump)。 你可以把许多信号和你所希望的单一槽相连,并且一个信号也可以和你所期望的许多槽相连。 把一个信号和另一个信号直接相连也是可以的。 (这时,只要第一个信号被发射时,第二个信号立刻就被发射。 ) 总体来看,信号和槽构成了一个强有力的组件编程机制。 华中农业大学本科毕业论文(或设计) 6 如果一个类要使用信号与槽机制,它就必须是从 QObject 或 QObject 的子类继承,而且类的定义必须加上 Q_OBJECT 宏。 signals、 slots 和 emit 是 Qt 特有的关键字,分别用来表示信号、槽、和发送信号,移除这些关键字和预处理程序,就可 以使用标准的 C++编译器。 槽同其他函数一样也具有访问权限,只是槽的访问权限决定了谁可以和 它 相 连 , 如 一 个 public slots: 包 含 了 任 何 信 号 都 可 以 相 连 的 槽 (Andrew Krause,2020)。 一个 protected slots:包含了只有这个类和它的子类的信号才能连接的槽。 这就是说这些槽只是类的实现的一部分,而不是它和外界的接口。 一个 private slots:包含了只有这个类本身的信号可以连接的槽,甚至它的子类都没有获得连接的权利。 图 1 信号和槽的 连接原理图 Fig. 1 Signal and slot connection scheme ( 2) Qt 元对象系统 Qt 中的元对象系统是用来处理对象间通讯的信号 /槽机制、运行时的类型信息和动态属性系统。 它基于下列三类: QObject 类、类声明中的私有段中的 Q_OBJECT 宏、元对象编译器( moc)。 moc 读取 C++源文件。 如果它发现其中包含一个或多个类的声明中含有Q_OBJECT 宏,它就会给含有 Q_OBJECT 宏的类生成另一个含有元对象代码的 C++源文件。 这个生成的源文件可以被类的源文件包含( include)到或者和这个类的实现一起编译和连接。 除了提供对象间通讯的信号和槽机制之外(介绍这个系统的主要原因), QObject中的元对象代码实现其它特征: ( 1) className()函数在运行的时候以字符串返回类的名称,不需要 C++编译器中的本地运行类型信息( RTTI)的支持。 ( 2) inherits()函数返回这个对象是否是一个继承于 QObject 继承树中一个特定类的类的实例。 华中农业大学本科毕业论文(或设计) 7 ( 3) tr()和 trUtf8() 两个函数是用于国际化中的字符串翻译。 ( 4) setProperty()函数 和 property()函数,这 两个函数 是 用来通过名称动态设置和获得对象属性的。 ( 5) metaObject()函数返回这个类所关联的元对象。 虽然使用 QObject 作为一个基类而不使用 Q_OBJECT 宏和元对象代码是可以的,但是如果 Q_OBJECT 宏没有被使用,那么这里的信号和槽以及其它特征描述都不会被提供。 根据元对象系统的观点,一个没有元代码的 QObject 的子类和它含有元对象代码的最近的祖先相同。 举例来说就是, className()将不会返回你的类的实际名称,返回的是它的这个祖先的名称。 故强烈建议 QObject 的所有子类使用 Q_OBJECT 宏 ,而不管它们是否实际使用了信号、槽和属性 (Jonathan Corbet, 2020)。 3 嵌入式终端应用程序之记事本和电子相册架构设计 目前市场上嵌入式手持设备, 320*240 的解析度基本满足了人们对显示画面大小及图像清晰度的要求,逐渐占领了市场主流。 故记事本和电子相册界面大小设定 320*240,并且记事本和电子相册均支持键盘控制操作和点击( PC 机上鼠标点击,嵌入式设备的触摸屏点击)控制操作。 特色是界面语言支持中文、英文、日文三种语言的显示。 记事本架构设计 记事本设计需求 记事本可以将目录下的记事本文 件以文件名列表的形式显示出来,并可以实现记事本文件的新建、打开、编辑和删除等功能;记事本可以根据文件内容的多少来实现文本的滚动显示,并可以通过软键盘对文本进行编辑等。 ( 1) 文件列表功能:记事本的文件列表用于显示记事本文件名,并且当记事本文件名过长时进行文件名长度显示的控制。 当文件数目多于当前界面显示范围,则出现上下方向的滚动条,可以向上或向下滚动显示文件名。 ( 2) 文件名选中显示功能:在文件列表上被选中的文件名高亮显示。 ( 3) 新建文件功能:新建记事本文件时,提示输入文件名,如果没有输入文件名而选择直接进入文件编辑界面,系 统则提供默认的文件名用于存储文件。 编辑新建文件时,文件名在编辑界面上方显示。 ( 4) 控制文本编辑格式功能:编辑文件时,文本内容输入到当前界面的右端边界处自动换行,也可以利用键盘操作执行换行动作。 输入的文本内容多于当前屏幕显示范围时出现纵向滚动条,随着文本输入滚动显示内容。 保存文件后,文件名立即显示在文件列表上。 ( 5) 打开文件功能:根据文件列表选择打开指定的文件,打开指定文件时,显示打开文件的文件内容在文件编辑界面上,文件内容过多时可以滚动显示,并在文件编辑界面的上方滚动显示打开的文件的文件名。 华中农业大学本科毕业论文(或设计) 8 ( 6) 文件内容编辑和显示功能 :在文件编辑界面上可以对文件的内容进行编辑和修改。 如果文件内容多于当前屏幕显示范围的话,出现纵向滚动条,可以滚动显示当前文件的文件内容。 ( 7) 打开下一个文件功能:在当前打开文件列表界面,若选择 “打开一个文件 ”功能,则显示下一个文件的内容在文件编辑区。 ( 8) 文件内容修改提示功能:若在打开的文件中对其内容进行了修改,在关闭文件时将会提示文件的内容已经被修改的消息,用户可选择是否保存修改后的内容。 ( 9) 删除文件功能:可以在文件列表上对指定文件进行删除操作,也可以打开文件后,对打开的文件进行删除操作。 选择删除文件操作时,会出现 确定文件删除的提示,如果此时放弃删除操作,则文件不会被删除,否则文件将会被彻底删除,即从物理设备上被删除。 文件被删除后,文件列表上该文件名被移除。 ( 10) 软键盘输入功能:软键盘支持英文输入, Cap 键支持大小写英文切换,提供 Shift 键的上下字符切换功能, Enter 可以进行回车换行,其 ESC 键执行软键盘退出功能。 软键盘上的按键与物理键盘的按键位置相对应。 ( 11) 给用户提供友好的图形用户界面,并合理安排界面元素布局, 使其交互性好且 方便用户操作。 记事本界面设计 记事本主要界面设计 : ( 1) 文件列表界面:如图 2 所示,界面大小 为 320*240。 界面上方提供记事本图标和记事本文字标签,中间的显示区域显示记事本文件列表。 界面的最下方为两个按钮,左侧的是功能按钮,右侧的是返回按钮,此界面上分别标记为 “Option”和 “Exit”。 文件列表中文件以文件创建时间排序,将要进行操作的文件名高亮显示。 图 2 文件列表界面 Fig. 2 File list interface 华中农业大学本科毕业论文(或设计) 9 ( 2) 新建文件编辑界面:如图 3 所示,界面大小为 320*240。 界面上方显示记事本图标和新建文件的文件名,如果没有输入文件名则不显示。 中间的显示区域为文件编辑区,用于接收文本的输入。 界面的最下方左侧为功能按钮,右侧的是返回按钮,此界面上分别标记为 “Option”和 “Save”。 图 3 新建文件编辑界面 Fig. 3 New document editing interface ( 3) 打开文件内容显示界面:如图 4 所示,界面大小为 320*240。 界面上方显示记事本图标和打开的文件的文件名,中间的显示区域为文件内容显示区,可以接受文本的编辑和修改。 界面的最下方左侧为功能按钮,右侧的是返回按钮,此界面上 分别标记为 “Option”和 “Back”。 图 4 文件打开界面 Fig. 4 Documents open interface 华中农业大学本科毕业论文(或设计) 10 记事本功能菜单设计: 如图 5 所示,记事本功能菜单大小要小于记事本主要界面的大小,根据具体条目的数量来调整为合适的大小。 菜单上显示可操作的功能选项,并对选定的功能选项高亮显示。 界面的最下方左侧为功能按钮,右侧的是返回按钮,菜单中分别标记为“Select”和 “Back”。 图 5 功能菜单 Fig. 5 Function menu 记事本消息提示框设计: 如图 6 所示,消息提示框界面大小为 320*消息提示框的显示区域显示提示动画和提示的内容。 界面的最下方左侧为功能按钮,右侧的是返回按钮,此界面中分别标记为 “Yes”和 “No”。 图 6 消息提示框 Fig. 6 Messagebox 华中农业大学本科毕业论文(或设计) 11 相邻两个界面之间切换时,若后出现的界面大小小于先出现的界面大小,则第一个界面显示蒙版即表示为禁用状态,如图 5 和图 6。 记事本软键盘界面设计: 如图。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。