基于qt的电子相册说明书.docx
《基于qt的电子相册说明书.docx》由会员分享,可在线阅读,更多相关《基于qt的电子相册说明书.docx(47页珍藏版)》请在冰豆网上搜索。
![基于qt的电子相册说明书.docx](https://file1.bdocx.com/fileroot1/2022-12/31/5e65cf56-e15e-405c-b734-65e83eb8d639/5e65cf56-e15e-405c-b734-65e83eb8d6391.gif)
基于qt的电子相册说明书
毕业设计说明书
基于QT的记事本和电子相册
学生姓名:
学号:
学院:
专业:
指导教师:
2014年6月
基于QT的记事本和电子相册
摘要
越来越多的设备需要一个图形化的人机接口界面(GUI),良好的人机交互界面是各个软件系统设计的一个关键技术,尤其是在给广大人们的使用中,对程序的实用性、美观性和视听娱乐性提出了更高的要求。
而记事本和电子相册以其实用性和良好的观赏性逐渐成为人们查看和使用中不可或缺的组成部分。
开发基于Qt的界面美观、功能丰富的记事本和电子相册,具有一定的实用意义和价值。
本文的目标是设计和实现基于Qt的记事本和电子相册。
论文首先介绍了Qt的优点和Qt开发环境的搭建,着重分析了Qt在软件开发中的编程机制。
并根据嵌入式应用的特点对基于Qt的记事本和电子相册进行了设计需求分析、具体界面的设计和整体结构的设计。
本课题根据记事本和电子相册的算法,设计并实现了记事本的相关功能(如:
新建、打开、编辑和删除文件等)和电子相册的相关功能。
最后对关于论文进一步工作的方向进行了简要的讨论。
关键字:
Qt,图形用户界面,记事本,电子相册
EmbeddedterminalapplicationprogramdevelopmentbasedonQT
——Developmentofnotepadandelectronicalbum
Abstract
MoreandmoreembbededEmbeddedTerminalneedgraphicsuserinterface(GUI).AgoodHuman-ComputerInteractioninterfaceisthekeytechnologyofembeddedsystemdesign.Higherdemandsofthepracticality,aestheticsandaudio-visualentertainmentofembeddedterminalareneeded,especiallyinembbededsystemhandhelddevice.Notepadandelectronicphotoalbumarebecominganintegralpartofembeddeddevicefortheirpracicalityandgoodviewing.Ithassomepracticalsignificanceandvaluetodevelopanotepadandanalbumwithbeautifulinterface,richfunctionsandgoodinteractionbasedonembeddedterminal.
Theaimofthispaperistodesignandimplementanotepadandanalbumintheembededterminalenvironment.ThispaperpresentedtheadvantageofLinuxandthebuildingofQTdevelopingenvironment,focusedontheprogrammingmechanismofdevelopingsoftwarewithQt.Itanalysedtheneedsofthedesign,designedthespecificinterfaceandoverallstructureofnotepadandalbumintheembededterminalenvironmentaccordingtofeaturesofembeddedapplication.Thisprojectdesignedandimplementedtherelevantfunctionsofnorepad(suchasnewfile,openfile,editfileanddeletefile)aswellastherelevantfunctionsofalbum(suchasenlarge、minify、rotateandmovethepicture)basedonthealgorithmsofnotepadandalbum.Finally,briefdisscusionaboutthefurtherreaserchofthispaperwaspresented.
Keywords:
Qt,GUI,notepad,alb
1引言
1.1课题研究背景和意义
随着各种电子产品的不断发展和不断的进步,现在往往要求用户操作系统有图形化的功能。
一个拥有良好舒适的图形化界面的程序可以使用户更加喜欢和更好的运用软件进行操作[1]。
虽然市场上现在已经有了众多的优秀的GUI应用软件,但随着近年来计算机技术的迅速发展,当新硬件、新技术出现时,计算机的体系结构、指令系统和操作系统都可能发生相应的改变,这势必会导致一部分应用软件在新环境下无法正常运行[2]。
如果舍弃原有软件而重新开发,将会耗费大量的人力和资金,而且浪费了许多成熟的软件成果。
而Qt是1991年奇趣科技开发的一个跨平台的C++图形用户界面应用程序框架[3]。
它提供给应用程序开发者简历艺术级的图形用户所需的所有功能。
Qt很容易扩展,并且允许真正地组件编程。
在源代码级上实现了跨平台特性,极大的支持了跨平台通用软件的开发。
Qt可以用同一个源程序在不同平台上编译链接,生成目标代码,并取得相同的运行效果,称为“一次编写,随处编译”,利用这种方法充分实现了程序的跨平台运行[4]。
这种基于源代码的跨平台特性不仅解决了性能的问题,而且可以发挥各个平台的优势,充分利用每个平台自身的特点;并且既可以在新环境下实现原有软件的功能和特点,减少开发费用,还可以改进原有软件的不足,增加新的需求,从而提高软件的质量,延长软件生命期。
因此,基于Qt的应用程序软件的开发是一个非常有意义的课题,具有重要的研究和商业价值。
1.2基于Qt的软件技术发展现状和未来
1.2.1标志性的产品已露头角
计算机应用的普及、互联网技术的实用以及纳米微电子技术的突破,正有力推动着21世纪工业生产、商业活动、科学实验和家庭生活等领域自动化和信息化进程。
全过程自动化产品制造、大范围电子商务活动、高度协同科学实验以及现代化家庭起居,为嵌入式产品造就了崭新而巨大的商机。
除了沟通信息高速公路的交换机、路由器和Modem,构建CIMS所需的DCS和机器人以及规模较大的家用汽车电子系统[5]。
最有量产效益和时代特征的嵌入式产品应数因特网上的信息家电(InternetAppliances),如Web可视电话、Web游戏机、WebPDA(俗称电子商务、商务通)、WAP电话手机、以及多媒体产品,如STB(电视机顶盒)、DVD播放机、电子阅读机[6]。
1.2.2基于Qt的软件技术面临挑战
以信息家电为代表的互联网时代基于Qt的产品,不仅为软件应用市场展现了美好前景,注入了新的生命;同时也对软件技术提出新的挑战。
这主要包括:
支持日趋增长的功能密度、灵活的网络联接、轻便的移动应用和多媒体的信息处理,此外,当然还需对付更加激烈的市场竞争。
1.3课题研究内容
针对各种不同应用平台产品的高度个性化,其外观、与用户交互的界面千差万别的特点,故而系统的设计目标是意在打造一个能在各产品用户端运行、通用的、可以方便的支持各种控件、各种图形格式,具有体积小、可裁剪、可移植的这样一个面向用户的应用程序系统,使各种不同的设备能具有美观的用户界面,相对比较丰富的功能,操作起来简单而又直观[7]。
本文通过对Window和Qt的分析,在Window下Qt的基础上,开发了面向Windows终端的记事本和电子相册应用软件。
记事本可以将文件下的记事本文件以其原有存放的形式显示出来,并可以实现记事本文件的新建、打开、编辑和内容保存等功能。
电子相册不仅支持一些图片文件的浏览,删除等的功能而且还支持图片的放大、缩小、旋转以及图片以幻灯片形式播放和暂停等功能。
他们体积小,移植方便,适用于很多的系统[8]。
此外它作为一种小型GUI解决方案,可用于那些对GUI大小要求苛刻的各种应用系统中[9]。
2Qt简介
2.1Qt开发工具简介
2.1.1Qt主要特性
Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司开发,目前包括Qt/X11、基于Framebuffer的Qt/Embedded、快速开发工具QtDesigner以及国际化工具QtLinguist等。
人们所熟知的Linux下面的KDE环境就是基于Qt开发而成的。
Qt支持Unix和Linux系统以及Windows系统。
Qt的主要特点有:
面向对象,很容易扩展,并且允许真正的组件编程;Qt对各个模块进行了良好的封装,使各模块可重用性较好;优良的跨平台特性,使用Qt类编写的程序可以实现“一次编码,到处编译”[10],极大的降低了跨平台开发的难度;构件支持,对于对象间通信,Qt没有采用函数回调的方法,而是采用了一种全新并且可选的被称为“信号与槽”的对象间通信机制,通过一个对象信号的发射,另一个槽函数的响应,使各个对象之间的通信安全而且高效。
Qt的这些特点使它非常适合于真正的构件编程,同时使各个组件之间的协同工作变得十分简单,并且Qt是直接基于Xlib的,不依赖Motif工具包,所以它的执行效率比一般的基于平台的代码的执行效率要高。
2.1.2Qt编程机制简介
(1)QT的信号与槽机制介绍
信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解。
信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其它工具包的重要地方。
信号和槽是QT自行定义的一种通信机制,它独立于标准的C/C++语言,因此要正确的处理信号和槽,必须借助一个称为moc(MetaObjectCompiler)的QT工具,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。
在我们所熟知的很多GUI工具包中,窗口小部件(widget)都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针[11]。
但是,在QT中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。
信号和槽能携带任意数量和任意类型的参数,他们是类型完全安全的,不会像回调函数那样产生coredumps[12]。
所有从QObject或其子类(例如Qwidget)派生的类都能够包含信号和槽。
当对象改变其状态时,信号就由该对象发射(emit)出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号[13]。
这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。
槽用于接收信号,但它们是普通的对象成员函数。
一个槽并不知道是否有任何信号与自己相连接。
而且,对象并不了解具体的通信机制。
信号和槽的机制是类型安全的:
一个信号的签名必须与它的接收槽的签名相匹配。
(实际上一个槽的签名可以比它接收的信号的签名少,因为它可以忽略额外的签名。
)因为签名是一致的,编译器就可以帮助我们检测类型不匹配。
它以警告的方式报告类型错误,而不会使系统产生崩溃。
信号和槽是宽松地联系在一起的:
一个发射信号的类不用知道也不用注意哪个槽要接收这个信号[14]。
Qt的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。
信号和槽可以使用任何数量、任何类型的参数。
它们是完全类型安全的:
不会再有回调核心转储(coredump)。
你可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。
总之,信号与槽构造了一个强大的部件编程机制。
总体来看,信号和槽构成了一个强有力的组件编程机制。
如果一个类要使用信号与槽机制,它就必须是从QObject或QObject的子类继承,而且类的定义必须加上Q_OBJECT宏。
signals、slots和emit是Qt特有的关键字,分别用来表示信号、槽、和发送信号,移除这些关键字和预处理程序,就可以使用标准的C++编译器。
槽同其他函数一样也具有访问权限,只是槽的访问权限决定了谁可以和它相连,如一个publicslots:
包含了任何信号都可以相连的槽(AndrewKrause,2007)。
一个protectedslots:
包含了只有这个类和它的子类的信号才能连接的槽。
这就是说这些槽只是类的实现的一部分,而不是它和外界的接口。
一个privateslots:
包含了只有这个类本身的信号可以连接的槽,甚至它的子类都没有获得连接的权利。
(2)Qt元对象系统
Qt中的元对象系统是用来处理对象间通讯的信号/槽机制、运行时的类型信息和动态属性系统。
它基于下列三类:
QObject类、类声明中的私有段中的Q_OBJECT宏、元对象编译器(moc)。
moc读取C++源文件。
如果它发现其中包含一个或多个类的声明中含有Q_OBJECT宏,它就会给含有Q_OBJECT宏的类生成另一个含有元对象代码的C++源文件。
这个生成的源文件可以被类的源文件包含(#include)到或者和这个类的实现一起编译和连接。
除了提供对象间通讯的信号和槽机制之外(介绍这个系统的主要原因),QObject中的元对象代码实现其它特征:
(1)className()函数在运行的时候以字符串返回类的名称,不需要C++编译器中的本地运行类型信息(RTTI)的支持。
(2)inherits()函数返回这个对象是否是一个继承于QObject继承树中一个特定类的类的实例。
(3)tr()和trUtf8()两个函数是用于国际化中的字符串翻译。
(4)setProperty()函数和property()函数,这两个函数是用来通过名称动态设置和获得对象属性的。
(5)metaObject()函数返回这个类所关联的元对象。
虽然使用QObject作为一个基类而不使用Q_OBJECT宏和元对象代码是可以的,但是如果Q_OBJECT宏没有被使用,那么这里的信号和槽以及其它特征描述都不会被提供。
根据元对象系统的观点,一个没有元代码的QObject的子类和它含有元对象代码的最近的祖先相同。
举例来说就是,className()将不会返回你的类的实际名称,返回的是它的这个祖先的名称。
故强烈建议QObject的所有子类使用Q_OBJECT宏,而不管它们是否实际使用了信号、槽和属性[15]。
3嵌入式终端应用程序之记事本和电子相册架构设计
3.1记事本架构设计
3.1.1记事本设计需求
记事本可以讲文件下的记事本文件按文本的形式显示出来,并可以实现记事本文件的新建、打开、编辑和文本的删除等功能;记事本可以根据文件内容的多少来实现文本的滚动显示,可以通过计算机键盘对文本进行快速的编辑等。
(1)记事本新建功能:
可以创建一个新的记事本文件。
(2)打开记事本的功能:
根据文件列表选择打开指定的文件,打开指定文件时,显示打开文件的文件内容在文件编辑界面上,文件内容过多时可以滚动显示,并在文件编辑界面的上方滚动显示打开的文件的文件名。
(3)控制记事本编辑格式功能:
编辑文件时,文本内容输入到当前界面的右端边界处自动换行,也可以利用键盘操作执行换行动作。
输入的文本内容多于当前屏幕显示范围时出现纵向滚动条,随着文本输入滚动显示内容。
(4)记事本内容修改提示功能:
若在打开的文件中对其内容进行了修改,在关闭文件时将会提示文件的内容已经被修改的消息,用户可选择是否保存修改后的内容。
(5)记事本内容增删改查功能:
在打开记事本文件后,可以对记事本文件中的内容进行编辑,如增加、删除、修改、撤销修改、查找等。
这一旦发生变化,则在选择保存后,文件列表的文件也发生了改变。
(6)记事本保存功能:
可以对操作了的记事本文件进行保存,在选择保存记事本文件后,文件名立即显示在文件列表上。
3.1.2记事本界面设计
(1)新建文件编辑界面:
如图3.1所示,界面上方显示功能界面名称。
工具栏上面有各种操作的按钮,中间区域为文本编辑区,用于接收文本的输入,界面下方有提示和日期时间的显示。
界面可以实现扩大缩小的功能。
图3.1记事本界面
(2)打开文件内容显示界面:
如图图3.2所示,界面中间区域为文件内容的显示区,可以接收文本的编辑和修改。
界面下方左侧为显示文件导入完毕提示。
图3.2打开记事本界面
记事本功能菜单设计:
如图3.3所示,记事本工具栏上依次为新建按钮、打开按钮、保存按钮、剪切按钮、复制按钮、粘贴按钮、撤销按钮、查找按钮以及返回上一界面按钮。
图3.3记事本菜单界面
记事本查找消息框设计:
如图3.4所示,在输入框中输入要查找的内容,点击查找下一个按钮,就会在显示文本区域找到要查找的内容并且会标记出来。
图3.4记事本查找界面
记事本消息提示框设计:
如图3.5所示,消息提示框的显示区域显示提示动画和提示的内容。
界面的下方左侧为确认保存功能按钮,下方中间为不保存按钮,下方右侧为取消操作按钮。
图3.5记事本保存界面
3.1.3记事本结构设计
如图3.6所示,记事本界面是记事本的入口和出口。
记事本通过调用文件列表功能菜单对文件执行各种操作。
在文件列表功能菜单中根据所选择的菜单条目进入相应的功能界面,如新建文件编辑界面、文件显示内容界面等。
各个界面都有自己的功能菜单,通过调用自己的功能菜单对当前界面进行下一步的操作,如当新建文件界面显示时,可通过菜单按钮进行增加、删除、修改和查找内容的操作;当打开文件时在文件内容的显示界面上,,可通过菜单按钮进行增加、删除、修改和查找内容的操作以及可通过修改文件提示框选择是否保存修改后的文件内容。
图3.6记事本结构设计
3.2电子相册架构设计
3.2.1电子相册设计需求
电子相册支持jpg、png、gif、xpm和bmp格式图片的浏览,并可以对图片进行放大、缩小或旋转角度显示。
电子相册还支持幻灯片模式浏览图片,并可以对图片进行删除等操作。
(1)在图片文件所在目录读取所有扩展名为jpg、xpm、png、bmp、gif格式的图片文件,并将读取的图片文件按顺序存放起来,在界面上显示放入的第一张图片。
(2)删除图片功能:
对当前界面上显示的图片可执行删除操作,删除以后所查看的图片中不再显示已删除的图片并且显示图片位置和总数目的数据也相应的发生变化。
(3)浏览图片功能:
对当前显示的图片可以执行浏览的功能,若图片原本大小超过图片浏览区域(即相框)的大小,则会自动调整变成适应图片浏览区域的最大尺寸。
若图片原本大小没有超过图片浏览区域大小,则以原始尺寸在图片浏览区域显示。
可对打开的图片进行放大、缩小、向左旋转全屏模式与返回原始尺寸等一系列的浏览模式操作。
(4)图片放大功能:
在当前图片尺寸大小的基础上,图片可逐级放大,以尺寸的0.25倍递增,最大可放大到打开图片时显示的初始尺寸的3倍。
(5)图片缩小功能:
在当前图片尺寸大小的基础上,图片可逐级缩小。
最小可缩小到打开图片时显示的初始尺寸的0.333倍。
(6)图片旋转功能:
打开图片后,可在图片的任意状态下对图片进行旋转操作。
可在当前状态下,将图片向左旋转,每次旋转角度差值为90°。
图片旋转后会自动适应窗口大小,完整显示图片。
(7)图片全屏显示功能:
可以将图片执行全屏显示。
为了支持点击操作,全屏显示时不覆盖相关功能按钮。
(8)幻灯片模式自动浏览功能:
可从当前选定的图片开始执行自动播放图片功能,初始设定播放速度为1秒间隔。
(9)图片查看功能:
可以按上一张、下一张的按钮用户自行的对图片进行查看。
(10)给用户提供友好的图形交互界面,并合理安排界面元素布局,使其美观并且方便用户操作
3.2.2电子相册界面设计
电子相册功能菜单设计:
如图3.7所示,界面上方显示功能界面名称,中间显示区域为所加载的图片的显示。
下面功能菜单栏依次为加载照片文件按钮、原图片大小显示按钮、图片放大按钮、图片和屏幕一样大小按钮、图片缩小按钮、图片旋转按钮、显示上一张图片按钮、图片显示当前位置和总照片数label、显示下一张图片按钮、删除当前所显示图片按钮、播放图片幻灯片按钮、暂停图片幻灯片按钮、返回上一界面按钮和退出系统按钮。
图3.7电子相册界面
如图3.8所示,在点下旋转按钮以后,图片会顺时针旋转90度显示出来。
使对图片查看有更好的便捷。
图3.8图片旋转效果
如图3.9所示,在点下放大按钮后,图片将放大,在放大到一定比例后,放大按钮将不可点击。
图3.9图片放大效果
如图3.10所示,在点下缩小按钮后,图片将缩小,在缩小到一定比例后,缩小按钮将不可点击。
图3.10图片缩小
如图3.11所示,在点下恢复按钮后,图片将填充整个界面,此时,不可以进行放大,缩小功能,只有在点下原图按钮后放大缩小按钮才可以继续使用。
图3.11图片适应屏幕
3.2.3电子相册结构设计
如图3.12所示,图片列表界面为电子相册的入口和出口。
通过图片列表功能菜单,可执行打开图片进行浏览的功能,并根据所选择的功能进入图片浏览界面。
进入图片浏览界面可通过图片浏览功能菜单,对当前显示的图片执行各种操作,从而进入相应的图片浏览界面。
放大图片的显示,缩小图片的显示,旋转图片的显示,删除当前图片图片全屏的显示和自动浏览图片的显示均将显示在图片浏览界面。
而各种模式下的图片浏览界面下,均可以通过功能菜单对其他浏览模式进行选择。
图3.12电子相册结构设计
4算法设计和实现
4.1记事本主要算法设计和实现
4.1.1记事本类结构设计
图4.1记事本类图
4.1.2记事本功能实现
记事本界面用到的控件主要有QLabel、QToolButton、QTextEdit等。
(1)记事本文件列表的实现:
首先扫描文件夹下的所有文件,包括隐藏的所有文件名,过滤记事本文件,并将这些记事本文件名根据创建时间的先后进行排序存储到文件链表中,将文件链表中的所有文件显示在文件列表界面。
流程图如图17。
(2)功能菜单的实现:
在记事本设计中有3个功能菜单界面,其中打开和新建的功能菜单均继承自记事本文件列表界面的功能菜单,这三个界面都含有一个QListBox控件,但是菜单项不同,并根据不同的菜单项实现不同的功能。
流程图如图18。
(3)新建文件的实现:
首先提示输入文件名,并检查文件名的合法性。
如果文件名不符合要求,则设置文件名的输入无效,并提示重新输入。
如果不输入文件名则提供默认的文件名,进入文本编辑界面,然后按照界面的宽度对文本输入进行限定,到界面宽度最大值时自动换行。
并且使文本保存时输入到物理设备上时支持unicode编码。
流程图如图19。
(4)打开文件功能的实现:
从文件列表选定打开的文件,然后将文件内容读到QTextStream中再显示在QTextEdit中,并且规定显示格式。
如果文件内容被修改后,提示文件是否需要保存。
如果通过菜单选择打开下一个文件,则查找到当前文件的