




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)任务书第1页毕业设计(论文)题目画图板的设计与实现毕业设计(论文)要求及原始数据(资料)1深入了解LINUX下的QTCREATOR的相关技术;2熟悉使用QT布局管理器的相关技术;3熟练掌握QTUI编辑界面的应用,训练编写程序的能力;4深入分析QT中的信号和槽函数的机制;5设计并实现QT下的画图板的基本功能;6训练检索文献资料和利用文献资料的能力;7训练撰写技术文档与学位论文的能力。第2页毕业设计(论文)主要内容1、QT的介绍与具体应用;2、QT中的信号和槽函数的机制;3、画图板功能设计;4、画图板界面设计;5、画图板涂鸦功能实现;6、画图板绘制基本图形的实现;7、实现编辑菜单功能;学生应交出的设计文件(论文)1内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。第3页主要参考文献(资料)1陈英,梁建武LINUX基础及应用教程水利水电出版社,2008,29422倪继利QT以及LINUX操作系统窗口设计电子工业出版社,2006,451523BLAKOWSKIG,STEINMETZRAMEDIASYNCHRONIZATIONSURVEYREFERENCEMODEL,SPECIFICATION,ANDCASESTUDIESJIEEEJOURNALSELECTEDAREASINCOMMUNICATIONS,1996,14(1)5354金西,黄汪嵌入式LINUX技术及其应用计算机应用,2000,20(7)565刘峥嵘嵌入式LINUX应用开发详解机械工业出版社,2004,53686林锐,韩永泉高质量程序设计指南C、C语言电子工业出版社,2007,1241557JONATHANCORBET,ALESSANDRORUBINI,GREGKOAHHARTMANLINUXDEVICEDRIVERJAN20058钱能C程序设计教程清华大学出版社,2006,56889任善全,吕强,钱培德等一个基于QTEMBEDDED的嵌入式LINUX应用程序的实现,计算机应用与软件,2006,210ISO/IECJTC1/SC29/WG11IS14496GENERICCODINGOFMOVINGPICTURESANDASSOCIATEDAUDIOINFORMATION(MPEG4)ISO/IEC,2000101511谭浩强C面向对象程序设计清华大学出版社,2006,8910012王子强,刘海燕,李媛州LINUX下图形用户界面程序的开发与实现,计算机应用与软件,2005专业班级软件1025班学生南茜要求设计(论文)工作起止日期2014年3月17日2014年6月27日指导教师签字日期2014年3月17日教研室主任审查签字日期系主任批准签字日期画图板的设计与实现摘要本文的主要内容是记述同题课程设计中的一些关键技术和辅助文档。本文的目标是设计一款基于QT编程语言的简易画图板,使其具有涂鸦,绘制基本图形等功能。本程序具有一定的实用意义和价值。功能分装良好可以方便的根据需求进行扩充。本文运用材料综述的方法,首先记述了编程环境的搭建,介绍了QT的优点,QT编码规范和QT的双缓冲机制在绘图中的运用。着重分析了QT在软件开发中的编程机制,并根据应用特点进行了设计的构件与算法的需求分析。其次在需求分析中给出是可行性分析,然后放入功能分析图和流程图帮助梳理设计思路。最后在详细设计阶段完成编码,实现程序功能,得到一个功能健全的画图板应用程序。在本文中将设计并实现画图板的一些基本功能,例如新建,打开,保存,清空,放大,缩小,还原,基本图形绘制,转换画笔颜色等功能。最后运行结果符合设计要求,方案可行。经过测试后程序功能实现良好。关键词嵌入式LINUXQT;图形用户界面;电子画板;双缓冲机制THEREALIZATIONOFDRAWINGBOARDFUNCTIONABSTRACTTHEMAINCONTENTOFTHISPAPERISDESCRIBEDWITHTHECOURSEINTHEDESIGNOFSOMEKEYTECHNOLOGIESANDSUPPORTINGDOCUMENTSTHEGOALOFTHISARTICLEISTODESIGNASIMPLEDRAWINGBOARDBASEDONQTPROGRAMMINGLANGUAGE,MAKEITSHAVEGRAFFITI,DRAWUPTHEBASICGRAPH,ANDOTHERFUNCTIONSTHISPROGRAMHASACERTAINPRACTICALSIGNIFICANCEANDVALUEFUNCTIONACCORDINGTOTHEREQUIREMENTSOFGOODPACKAGINGCANEASILYEXPANDEDTHISARTICLEAPPLIESTHEMETHODOFMATERIALREVIEW,THECONSTRUCTIONOFTHEFIRSTDESCRIBESTHEPROGRAMMINGENVIRONMENT,THISPAPERINTRODUCESTHEADVANTAGESOFQTQTCODECONVENTIONSANDQTDOUBLEBUFFERINGMECHANISMUSEDINTHEDRAWINGQTPROGRAMMINGINTHESOFTWAREDEVELOPMENTMECHANISMISANALYZEDEMPHATICALLY,ANDTHEDESIGNBASEDONTHEAPPLICATIONOFARTIFACTSANDREQUIREMENTSANALYSISOFTHEALGORITHMSECONDISFEASIBILITYANALYSISISGIVENINTHEREQUIREMENTSANALYSIS,ANDTHENINTOTHECOMBFUNCTIONANALYSISDIAGRAMANDFLOWCHARTTOHELPDESIGNTHINKINGPROGRAMISREALIZEDBYENCODINGTHEDETAILEDDESIGNPHASEISCOMPLETE,THEFUNCTION,GETAFUNCTIONINGDRAWINGBOARDAPPLICATIONDESIGNEDANDIMPLEMENTEDINTHISPAPERSOMEBASICFUNCTIONOFDRAWINGBOARD,FOREXAMPLETHENEW,OPEN,SAVE,EMPTY,ENLARGE,SHRINK,REDUCTION,BASICGRAPHICSRENDERING,CONVERTTHEBRUSHCOLOR,ANDOTHERFUNCTIONSFINALLYRUNRESULTSCONFORMTOTHEREQUIREMENTSOFTHEDESIGN,THESCHEMEISFEASIBLEPROGRAMFUNCTIONISGOODKEYWORDSLINUXQTGRAPHICALUSERINTERFACEGUIELECTRONICDRAWINGBOARDDOUBLEBUFFERINGMECHANISM目录摘要IABSTRACTII1引言111研究背景112研究的目的和意义213程序设计的环境选择22画图板设计的技术背景321QT的主要特征322QTCREATOR简介323QTCREATOR环境搭建424QT编程机制信号与槽机制简介525QT编码规范726GDI绘图理论基础927双缓冲机制928双缓冲技术绘图103画图板项目需求分析1231可行性研究12311经济可行性12312技术可行性12313运行可行性12314时间可行性12315法律可行性1232功能分析1333系统用例分1334性能需求13341应用需求分析14342运行需求分析14343其他需求分析144画图板概要设计1541画图板功能模块关系与划分1542画图板总体设计流程图165画图板详细设计1751画图板界面设计18511画图板的界面元素声明18512图板界面布局实现1952画图板功能详细设计20521画图板的文件编辑功能实现20522画图板的图片编辑功能实现2353画图板绘图功能实现26531绘图板的基本图形绘制功能实现26532绘图板自由绘图功能实现30533画图板画图辅助选项实现336画图板程序测试3561测试的重要性及目的3562测试的方法3663测试用例3664测试结果36结论38参考文献39致谢40外文原文41中文翻译491引言随着操作系统不断的更新换代,其自带的画图板界面及功能也是不断变化着,像是XP、VISTA、WIN7,它们的画图板的界面布局风格以及功能都有所不同。这表明尽管是简简单单的一个操作系统自带画图板,系统设计人员也没有停止对它的不断研与探索,他们在不断寻找着更人性化、更能满足大众需求的改变。随着社会的不管发展以及计算机的不断普及,人们对画画的要求越高,对绘图系统也提出了更高更全面的要求。许多用户由于自身的画图习惯或者是视觉效果不同,对传统的画图工具可能感觉不是特别满意。就像孩子总是喜欢画可爱型,而成人则画实用的。不同年龄不同身份的人,需求不同。综合上述,为了尽量让所有人满意,在此我设计一个大概的程序模型,让别人来试试我的绘图系统。对自从上世纪计算机系统向绘画界的延伸以来,绘图技术已成为计算机系统不可分割的一部分。而图形编辑器又是图形编辑软件的基础,几乎所有的图形编辑软件,都是在拥有基本图形编辑功能的基础上实现更复杂功能的。故在图形应用非常广泛的今天,研究开发绘图系统是非常有意义的。在绘图方面实现绘制直线、矩形、圆形等基本功能,在界面设计方面实现了对图形的操作,从而从底层对绘图系统进行简单的实现。与此同时,简单小巧的绘图记事功能软件的发展也在蓬勃向前。本软件功能与WINDOWS下附件中的画图软件有类似功能。绘制方面的实现功能包括图片的打开新建保存,画布的放大缩小,画笔功能实现,基本图形的绘制,绘图时可以选择各种颜色,各种线宽。软件支持保存和读取JPG格式的图形。本软件运用的是面向对象程序设计的思想。相对于面向过程的设计理念,面向对象的设计方法更适用于画图板的设计,它使画图板所涉及的各部分功能模块实现更好的封装。它的特色是。一方法的唯一性,即方法是对软件开发过程全过程进行综合考虑得到的。二是高度的独立性,对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。三是良好的可扩展性,相对独立的功能模块使得程序可以根据需要进行相印的扩充或是缩减。11研究背景计算机绘图是相对于手工绘图而言的一种高效率、高质量的绘图技术。手工绘图使用三角板、丁字尺、圆规等简单工具,是一项细致、复杂和冗长的劳动。不但效率低、质量差,而且周期长,不易于修改。计算机绘图的发展更加趋向于用户需求导向,在一些专业领域中计算机绘图发展迅猛,例如PHOTOSHOP、ADOBEIMAGE、AUTOCAD等。多个程序的汇集,组成功能齐全、能够绘制基本地图图形和各类常用地图的程序组,称为绘图软件系统,或称为绘图软件包。绘图软件通常用高级算法语言编写,以子程序的方式表示,每个子程序具有某种独立的绘图功能。绘图软件包是绘图子程序的汇集,可包括几十个至几百个子程序。用户根据需要,调用其中一部分子程序,绘制某种图形或一幅地图。12研究的目的和意义日常生活中,有很多方面都会用到画图来解决阐述一些问题,这就需要借助计算机来进行简单的画图工作,此时就需要一个能简单解决这些问题的画图软件。本选题是设计一个简单的基于QTCREATOR的画图软件,能够完成一些简单的画图需求。现在比较经常使用的是WINDOWS系统下附带的画图软件,它基本上可以满足一些简单的画图需求。本设计就是按照这个画图软件的思想设计的,使画图软件能达到满足日常画图需求,便于存储编辑和展示,且要求功耗小且界面人性化,功能易扩展。13程序设计的环境选择QT类库大致可以分为三个部分控件,框架和工具。控件部分包括环境控件、主窗口控件、标准对话框、基本的GUI控件、扩展GUI控件、GUI组织控件以及帮助系统控件。框架部分包括的是一些抽象的类,通常不可见,如对象模型、抽象控件、绘图、拖放、控件外观。工具部分包括时间日期和链表树等数据结构,它们和GUI无关普通工具包括链表、堆栈、队列、树等常见数据结构,如QARRAY。图形处理工具控制图像的编码解码算法。如QIMAGELO。IO控制工具处理I,0的一些类,如QFILE。时间和日期工具类处理时间和日期,如QDATE,QTIME。在用QT开发程序时,对于GUI的设计有两种方法,一种是通过自己写代码来界面进行布局,但这就需要对OL有一定的熟练程度;另一种是通过QTDESIGNER来设计界面,只需在UI文件来拖控件来布局就行了。对只需要用QT进行开发的程序员来说,后者显然比前者来的快。以下结合一个实例来介绍用QTDESIGNER来开发程序的GUI,主窗口类从QWIDGET类派生,这样我们能方便地使用QT的QMENUBAR类来添加菜单,并使用QT的控件类来摆放面板控件,整个程序以事件为驱动,通过QT的SIGNALSLOT机制与终端用户交互。设计好界面后,在程序编译后会生成一个UI一H的头文件里面是一个UI一类,封装了一些所拖放控件的变量名和一个比较重要的SETUPUI函数,是一些布局的代码。要用到这个界面是只需继承这个类就可以了,或者是包含这个UIH的头文件。设计类的主要思想是把所有的信号和槽放在构造函数里,程序是以事件为驱动,当产生一个信号时,会去调用相应的函数。2画图板设计的技术背景21QT的主要特征QT是TROLLTECH公司的产品,TROLLTECH是挪威的一家软件公司,主要开发两种产品一种是跨平台应用程序界面框架;另外一种就是提供给做嵌入式LINUX开发的应用程序平台,能够应用到PDA和各种移动设备,TROLLTECH公司网址HTTP/WWWTROLLTECHCOM/。QT是一个多平台的C图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。QT是完全面向对象,很容易进行扩展,并且允许真正的组件编程。1996年开始,QT正式进入商业领域,它成为了全世界范围内数千种成功的应用程序的基础。QT同时也是流行的LINUX桌面环境KDE的基础,注KDE是所有主要的LINUX发行版的一个标准组件。它具有以下优点1)优良的跨平台特性QT支持下列操作系统MICROSOFTWINDOWS95/98,MICROSOFTWINDOWSNT,LINUX,SOLARIS,SUNOS,HPUX,DIGITALUNIXOSF/1,TRU64,IRIX,FREEBSD,BSD/OS,SCO,AIX,OS390,QNX等等。2)面向对象QT的良好封装机制使得QT的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。QT提供了一种称为信号与槽(SIGNALS/SLOTS)的安全类型来替代CALLBACK,通过一个对象信号的发射,另一个槽函数的响应,使各个对象之间的通信安全而且高效,这使得各个元件之间的协同工作变得十分简单。并且QT是直接基于XLIB的,不依赖MOTIF工具包,所以它的执行效率比一般的基于平台的代码的执行效率要高。3)丰富的APIQT包括多达250个以上的C类,还提供基于模板的COLLECTIONS、SERIALIZATION、FILE、I/ODEVICE、DIRECTORYMANAGEMENT、DATE/TIME类。甚至还包括正则表达式的处理功能。4)支持2D/3D图形渲染,支持OPENGL5)大量的开发文档6)XML支持22QTCREATOR简介QTCREATOR是跨平台的QT集成开发环境,QTCREATOR是QT被NOKIA收购后推出的一款新的轻量级集成开发环境(IDE)。此IDE具有良好的跨平台运行能力,支持的操作系统包括LINUX(32位及64位)、MACOSX以及WINDOWS。QTCREATOR的设计目标是使开发人员能够利用QT这个应用程序框架更加快速及轻易的完成开发任务QTCREATOR可以帮助QT用户更加快速便利的运行项目,还可以提高有经验的QT开发人员的工作效率,提高代码的可读性。其中使用强大的C代码编辑器可实现快速编写代码。语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。使用浏览工具管理源代码。集成了领先的版本控制软件,包括GIT、PERFORCE和SUBVERSION开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换。为QT跨平台开发人员的需求而量身定制。集成了特定于QT的功能,如信号与槽SIGNALSQLABELLABELNEWQLABEL“HELLOWORLD“,0APPSETMAINWIDGETLABELLABELSHOWRETURNAPPEXEC写完上面的代码后保存退出(WQ)VI编辑器。QMAKEPROJECT/把CPP文件编译成PRO文件QMAKE/通过PRO文件自动创建MAKEFILE文件MAKE/编译,生成HELLOWORLD执行文件图21QTCREATOR程序构件截图24QT编程机制信号与槽机制简介信号/槽机制是QT区别于其它工具包的最有显著特征的部分。在GUI编程中,当一个WIDGET改变,我们经常希望另外的WIDGET被告知。更普遍地,我们希望任何的对象都可以互相通信。比如,如果用户点击CLOSE按钮,我们大多希望调用窗口的CLOSE()方法。以前的工具集通过CALLBACK来实现这种通信。CALLBACK是指向函数的指针,因此,若果你想让处理函数通知你某些事件,你可以传递给另一个函数一个指针来处理函数。处理函数在适当的时候调用CALLBACK。CALLBACKS有两种根本的缺陷第一,它们不是类型安全的,我们无法确定处理程序会调用正确参数的回调函数CALLBACK。第二,回调函数耦合于处理函数,因为处理函数必须知道去调用哪个回调函数。QT提供了回调的替代技术信号和槽。当特定事件发生时引发相应的信号。QT的WIDGET有许多预定义的信号,同时我们也可以为WIDGET子类添加我们自定义的信号。槽是回应特定的信号时所调用的方法。QT的窗口部件有许多预定义的槽,但是我们也可以为窗口部件的子类田间我们自定义的槽,以处理我们所感兴趣的信号。信号槽机制是类型安全的信号的签名必须跟接受的槽的签名相匹配(事实上,槽的签名可以比信号的签名短,因为它可以忽略额外的字段)。因为签名是相容的,编译器就可以帮我们检测类型的不匹配。信号和槽是松耦合的一个类产生一个信号,并不知道而且不关心那个槽接受该信号。QT的信号槽机制保证,如果你连接了一对信号槽,槽会在适当的时间带着信号的参数被调用。信号和槽可以附带任何类型任何数量的参数。信号和槽是完全类型安全的。槽可以用来接受信号,不过槽也是普通的成员函数。类似于对象不知道谁接受它的信号,槽也不知道是否有信号连接自己。这保证了QT可以创建完全独立的组件。一个信号可以连接无数的槽,并且一个槽可以连接你想要连接的信号。甚至可以直接连接两个信号(当第一个信号产生,立即产生第二个信号)。信号和槽一起形成了一种强大的组件编程机制。QT的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。信号和槽可以使用任何数量、任何类型的参数。它们是完全类型安全的不会再有回调核心转储(COREDUMP)。可以把许多信号和你所希望的单一槽相连,并且一个信号也可以和所期望的许多槽相连。把一个信号和另一个信号直接相连也是可以的。总体来看,信号和槽构成了一个强有力的组件编程机制。如果一个类要使用信号与槽机制,它就必须是从QOBJECT或QOBJECT的子类继承,而且类的定义必须加上Q_OBJECT宏。SIGNALS、SLOTS和EMIT是QT特有的关键字,分别用来表示信号、槽、和发送信号,移除这些关键字和预处理程序,就可以使用“标准的C编译器”678。槽同其他函数一样也具有访问权限,只是槽的访问权限决定了谁可以和它相连,如一个PUBLICSLOTS包含了任何信号都可以相连的槽。一个PROTECTEDSLOTS包含了只有这个类和它的子类的信号才能连接的槽。这就是说这些槽只是类的实现的一部分,而不是它和外界的接口。一个PRIVATESLOTS包含了只有这个类本身的信号可以连接的槽,甚至它的子类都没有获得连接的权利。图22信号与槽机制示意图25QT编码规范第一条尽量不要直接引用QT示例(或其它符合GPL协议的程序源代码)中源代码如果引用了QT示例程序,请试图在内部使用不同的代码行来组织它。如果直接使用了QT的源代码文件,请保留位于文件首部的版权声明。如果您使用了别人编写的源代码,则需要取得相关的使用许可文书。但是如果你从建议中获得的仅仅是一些想法,而不是你实际上使用的代码,你也不需要文书。尽量不要对QT的源代码进行修改,如果为了某重要需求而一定要对QT源代码进行修改,那么一定要在源代码中修改的位置做详细的说明,并署名。另外还要书写详细的修改文档。第二条工程文件命名遵循的原则工程文件(PRO)命名采用工程名PRO的方式PTRO文件中HEARDERS和SOURCE行中如果有多个文件名(一般都会有的),则使用“”将他们隔开,并且使每一个文件名单独占一行。原则上文件名的先后顺序没有限制,但是一般的惯例是将依赖性最小的文件写在最前面,工程的主程序(一般是MAINCPP)往往出现在SOURCE的最后。一般将TARGET行写在HEARDERS和SOURCE的下面。下面是范例HEADERSHELLOHSOURCEHELLOCPPMAINCPPTARGETHELLO工程中所有文件和目录命名中的字母一律使用小写,以保持在WINDOWS环境下的兼容性。第三条函数注释三部分,功能、参数和返回值每个程序都应该以一段简短地、说明其功能的注释开头。请为每个函数书写注释以说明函数做了些什么。如果有参数和返回值,也需要对其进行解释。第四条变量、定义等注释对于每个静态变量和全局变量,请添加相应的注释语句。对于重要的变量、定义等进行注释。第五条变量和函数的命名原则变量名或函数名中使用大写字符来区分各个部分,以便于记忆和阅读。全局(包括类中的)变量用长名字,局部变量用短名字。类成员变量前应加上M_,全局变量加上G_,仅与本模块有关的变量加上L_。如果定义QT类库中某种类型的变量,采用将类名中大写字母提取出并合并成小写的缩写字符串的方法(去掉第一个Q),如QLINEEDITM_LEINPUTNUMQSTRINGM_SNAME如果程序中出现了两个类名缩写一样的问题,如QTOOLBAR和QTOOLBUTTON的缩写都是TB,这时应将其中一个类的缩写进行变动,变动的准则以能够避免冲突,同时缩写能够表达类名为准。如这里可以将QTOOLBAR的缩写为TBAR,QTOOLBUTTON仍用,这样就可以避免命名冲突。声明自定义对象类型的变量采用同样的方法。局部变量应尽量易懂简洁,使用常见的变量,如NUM,NCOUNT,I,J,K,N,LEN,POS,OFFSET,NREADNUM,INDEX,NRET,RET,STRING,FILENAME临时变量,如LTMP,FTMP,TMPSTR,TEMPSTR自定义信号以SIG_开头,自定义槽以SLT_开头。SIG_和SLT_后面第一个单词(或其缩写)要以小写字母开头,第二个以后的单词(或缩写)要以大写字母开头。如SIG_MOUSECLICKED,SLT_GETMOUSEEVENT。另外,信号和槽的参数必须完全对应。在用CONNECT进行连接的时候,信号和槽中的参数可以只写参数类型。基本结构是数个以大写字母开头的单词。返回自定义PRIVATE变量值的函数命名建议以GET开头,如GETLENGTH可以表示取回成员变量M_NLENGTH等;设置自定义PRIVATE变量的函数命名建议以SET开头,如SETLENGTH可以表示设置成员变量M_NLENGTH等。这样做是为了避免与QT类中的函数名发生冲突。全局函数命名请以小写G开头。第六条自定义类的命名原则自定义类一般有两个文件,一个头文件,一个实现体CPP。文件名采用被封装的类名,但是一律小写。如果一些结构或宏仅与本类有关,可在类头文件中定义。任何自定义类命名不要以Q开头,以免与QT类库中的类混淆。(对自定义的类命名建议以大写字母开头(MMCP),表达一定版权信息,并且在文件列表时自定义类会依次排在列表的前部)。如果需要自定义一个基类,请确保该基类的类名以BASE结束。工程的界面类一般从QWIGDETQMAINWINDOWQDIALOG类继承,工程主界面类的命名采用“工程名MAINWINDOW”方式,如ACHARTMAINWINDOW即表示CHART工程的主界面类。主界面类往往在程序的开头(MAIN函数)处构造,建议将构造主界面类的语句(MAIN函数)放在MAINCPP中。对于一般的窗体,请在类名的最后体现窗体的类型,一般的方法是如果从QWIDGET继承而来,则以WIDGET结尾,如果从QMAINWINDOW继承而来则以WINDOW结尾,从QDIALOG继承而来,则以DIALOG结尾。如果在自定义类中(从QT某个类继承),如果覆盖了父类中某个函数,请在该函数的声明旁边注明。第七条类声明体中的编排在类的声明体中,请按照Q_OBJECT、PUBLICSIGNALS、SLOTS、PROTECTEDPRIVATE,的顺序将成员变量和函数进行排列。如果需要在这个类(CLASS)中声明某种数据类型(结构、枚举等),请将这个声明放在所有成员变量和成员函数的前面。如果在一种类型的声明中,即有成员变量,又有函数声明,请使用两个相同的类型声明将它们隔开,如PRIVATEVOIDFUNCTIONPRIVATEINTM_NUMBER对一般的界面类,如果使用了信号槽,则CLASS声明的第一行必须是Q_OBJECT建议避免使用PROTECTED类型的成员函数或者成员变量,因为在QT中,大量的事件处理函数(槽)均是以PROTECTED类型出现的。第九条工程中目录的使用工程中的图片(建议以JPEGPNG格式(避免使用GIF),统一保存在“/PICS”目录中。工程使用的汉化相关文件(PO和QM)放在“/I18/”目录中。工程的临时交换目录请以宏的形式定义(建议使用“/TEMP/”),不要使用固定目录。另外,请不要使用“/TEMP/”目录名(这个目录名在QTFORWINDOWS的版本中有特殊意义)。第九条界面布局原则制作QT界面的时候,请尽量使用布局管理器(QLAYOUT)进行布局管理,避免使用绝对坐标,除非你能够绝对肯定这个界面的尺寸是完全不会变换的。如果某个区域出现了很多控件,在保证不会影响程序控制结构的前提下,请将这些控件放在一个可以包含其它窗口控件的盒子(如QWIDGET,QFRAME,QGROUPBOX)中,然后再让这个盒子出现在界面上(即这些控件以整体形式出现)。书写界面上的英文长度的时候,请与对应的中文进行比较,确保汉化后中文能够被完全显示。代码中如果出现了需要在界面上出现的文字,必须用英文表示,并且使用TR函数将其包含。如TR“MESSAGE”不能在程序中将这些文字直接用中文替换。26GDI绘图理论基础任何图形程序的输出,都离不开图形设备接口GDI(GRAPHICDEVICEINTERFACE),它是管理WINDOWS应用程序在窗口内的绘图操作和与此相关的许多其它信息。如图形设备(打印机、显示器)的信息、绘图的坐标系统和映射模式、绘图工具的当前状态(什么样的画笔、画刷、文本的前景色与背景色、文本所使用的字体)7。WINDOWS的GDI绘制的各种图形(点、线、圆、多边形、矩形等)是与设备无关的,即在屏幕的窗口内绘图与在打印机上绘图是相似的。GDI是一个可执行程序,它接收WINDOWS应用程序的绘图请求(表现为GDI调用),并将它们传送给相应的设备驱动程序,再由设备驱动程序驱动相应的硬件设备,如打印机或显示器输出。应用程序使用GDI可以对三种类型的图形进行操作文本操作、矢量图形操作和光栅图形操作(图像操作)。1文本操作是以逻辑坐标为单位来计算文本的输出位置,用户可以通过各种GDI函数来作出具有各种效果的文本。2矢量图形指的是利用画点、直线、曲线(折线、贝塞尔曲线等)、多边形、扇形、矩形等函数所绘制的图形。3光栅图形操作是指以光栅图形函数对以位图形式存储的数据进行操作,它包括各种位图和图标的输出,其在屏幕上表现为对若干个行和列的像素操作。光栅图形操作是直接从内存到显存的拷贝操作,其缺点是需要额外的内存空间,优点是操作速度快。27双缓冲机制所谓“双缓冲区”,故名思义就是要有俩缓冲区(简称A和B)。这俩缓冲区,总是一个用于生产者进行输入缓存,另一个用于消费者进行输出读取。当俩缓冲区都操作完,再进行一次交替切换(先前被生产者写入的转为消费者读出,先前消费者读取的转为生产者写入)。以此实现生产者和消费者不会同时操作在同一个缓冲区,就避免了发生冲突,因此也不需要在读写每一个数据单元时都进行同步/互斥操作。双缓冲展现了空间换时间的优化思路。为了解决双缓冲问题,我们需要定义两个互斥锁(简称LA和LB),分别对应俩缓冲区。生产者或消费者如果要操作某个缓冲区,必须先拥有对应的互斥锁。QT的双缓冲技术(DOUBLEBUFFERING)是QT绘画机制的一部分,是一种在QT4中被全面采用的技术。其核心是把一个窗口部件渲染到一个脱屏PIXMAP(OFFSCREENPIXMAP)中,然后再把这个PIXMAP复制到显示屏幕上。这样做的目的是用于消除屏幕的闪烁并且因而界面会显得更漂亮。QT4中,QT会自动处理这些情况,所以在普通的绘画中,我们不必要关注这些内容。在更详细的说明这一技术前,简单介绍一下QT的绘画机制。QT的绘画机制本质上是提供了2个工具QPAINTER和QPAINTDEVICE,分别代表人类世界的画笔和画板。GEMFIELD要完成一次绘画,就必须有个画笔(QPAINTER),另外,还得解决画笔画在哪儿(画板,QPAINTDEVICE)的问题。QT中的画板是QPAINTDEVICE,当然,GEMFIELD用到的都是它的子类,也就是具体哪种画板它们是QWIDGET、QIMAGE、QPICTURE、QPIXMAP等,也就是每一个可见的控件(QWIDGET的子类)都是画板(在其PAINTEVENT里绘画)。28双缓冲技术绘图当要绘制屏幕时,我们只要调用PAINT函数即可。其中我们可以使用绘图方法来绘制任何文字图形图像。可是当我们绘制的东西多了之后,你就会发现又是屏幕上的显示根本不是我们要的结果,很杂乱。我们知道,如果窗体在响应绘图消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。因为窗体在刷新时,总要有一个擦除原本图象的过程,此时程序会利用背景色填充窗体绘图区,然后再调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。于是我们就看到了闪烁现象。因此,双缓冲区就提供了一个完美的解决方案。我们可以在缓冲区2中绘制图像,而是用缓冲区1来输出到屏幕。这样我们就可以控制绘制和现实的过程,从而避免上面的现象。双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度。双缓冲实现过程如下1在内存中创建与画布一致的缓冲区2在缓冲区画图3将缓冲区位图拷贝到当前画布上4释放内存缓冲区其实,在这样一个简单的绘图工作中,这样的技术大可不必。而且随着半导体技术的进步,双缓冲所能发挥出的功能相对减少。另外一个不容忽视的问题是,使用双缓冲技术会增加系统的负载。因为相比普通的绘制,它多出了一些工作。比如在SYSZUXPAD上运行GEMFIELDFUWAARROW程序时,双缓冲时CPU的利用率是50,而没有采用双缓冲时,CPU的利用率是37。双缓冲和直接绘制的区别示意图如下图21双缓冲绘图原理图3画图板项目需求分析31可行性研究该阶段通过对系统目标的初步调研和分析,提出可行性方案并进行论证。我们在这里主要从技术可行性、经济可行性和操作可行性等方面进行分析。311经济可行性开发该系统所需的相关资料可以通过对现已存在的相关系统进行调查采集,所需的应用软件、硬件系统也易于获得,因此开发成本较低。而引进使用本系统后,与传统方式相比,具有高效率、低成本、高质量的特点,可以节省不少人力、物力及财力。所以,从经济的角度来看,该系统可行。312技术可行性技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否能够满足开发需求等等。本系统使用JSP开发语言,调试相对简单,当前的计算机硬件配置也完全能够满足开发的需求,因此在技术上是绝对可行的。软件方面,由于目前单机模式相对发展成熟,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。本系统的开发,是典型的面向对象系统,采用QT编程语言,已无技术上的问题。313运行可行性运行可行性是对组织结构的影响、现有人员、机构和环境对系统的适应性以及人员培训补充计划的可行性。当前信息化技术已经相当普及,各类操作人员水平都有相当的高度,所以在运行上是可行的。314时间可行性从时间上看,在两个月的时间里补充相关知识并完成系统的开发,虽然有些紧张,但却并非不可实现。通过这两个多月的不懈努力,系统功能已基本实现。315法律可行性1所有技术资料都为合法。2开发过程中不存在知识产权问题。3未抄袭任何系统,不存在侵犯版权问题。4开发过程中未涉及任何法律责任。综上所述,本系统的开发从技术上、经济上、法律上都是完全可靠的。需求分析是一个软件的基础。如果没有正确的需求分析就不能做出满意的软件。所以可以说,需求分析是一个软件设计的灵魂。所以在任何系统开发之前,都用该进行相应的需求分析。需求分析的精准度越高,开发出来的程序稳靠行就越高,所需费用就会降低。反之,做出来的程序安全系数不高,还会增加开发费用,造成人力物力资源的严重浪费。32功能分析我作的是QTCREATOR下的画图板。在设计时需要考虑用户的需求和画图的习惯。例如习惯上的工具面板应该是竖排放置,而编辑菜单应该放置在横排。在进行具体的软件实际设计之前,应先对使用过程中用户可能需要并在本程序中应当实现的功能等进行整理,并列一个简要的提纲,如下1画板新建功能新建初始画板。2画板保存、另存为功能在对画板进行编辑之后,可以选择保存或者另存为。3画板的打开功能可以打开原来编辑并保存过的画板。4画板放大功能图片可逐级放大尺寸。5画板缩小功能图片可逐级缩小尺寸。6画板还原功能画板通过不同尺寸的放大和缩小后,能够还原到初始新建的尺寸大小。7画板清空功能画板可以在当前任何状态下进行对当前状态的清空,回到初始新建画板状态。8画板画图工具功能画板可以实现选择图形、画笔线宽、画笔颜色等功能。9画板的图形选择功能画直线、圆形、矩形、圆角矩形。10图片打开、编辑、保存功能可以打开一些格式的图片,如PNG、BMP等,并且可以作为画板背景,在其做编辑并且保存。33系统用例分图41显示了画图板使用人操作的功能模块。包括了新建打开保存,画图板的缩放,清屏,绘制基本图形,画笔刷子橡皮,改变颜色,改变线宽34DIAGRAM打开保存新建清屏文件操作界面操作缩放用户自由绘图绘制基本图形颜色选择绘图线宽选择图31功能分析用例图性能需求为了保证系统能够长期、稳定、安全、可靠、高效地运行,系统处理的准确性和及时性是系统的必要性能。作为系统中很多数据的来源,本系统的添加功能对于整个系统的功能及性能举足轻重,其准确性和及时性很大程度上决定了系统的成败,因此在开发过程中,必须采用一定的方法保证系统的准确性和及时性。341应用需求分析系统的性能要求通常是对系统需要的存储容量以及后援存储、重新启动和安全性、运行效率等方面的考虑。软件方面通过虚拟机软件,你可以在一台物理计算机上模拟出另一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。对于你而言,它只是运行在你物理计算机上的一个应用程序,但是对于在虚拟机中运行的应用程序而言,它就是一台真正计算机。因此,当你在虚拟机中进行软件评测时,可能系统一样会崩溃;但是,崩溃的只是虚拟机上的操作系统,而不是物理计算机上的操作系统,并且,使用虚拟机的“UNDO”1(恢复)功能,你可以马上恢复虚拟机到安装软件之前的状态。虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实WINDOWS系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(VMWARE,VIRTUALBOX,VIRTUALPC)不同在于虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动WINDOWS系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。流行的虚拟机软件有VMWAREVMWAREACE)、VIRTUALBOX和VIRTUALPC,它们都能在WINDOWS系统上虚拟出多个计算机。342运行需求分析硬件条件酷睿2CPU、1GRAM、10G以上硬盘的PC机。软件条件装载UBANTU虚拟机,QTCREATOR。343其他需求分析本系统具有较好的可维护性、可靠性、可理解性以及运行效率,易于用户理解和操作。可维护性包括了可读性、可修改性、可测试性等含义;可靠性则通常包括正确性和健壮性。在系统开发过程中,要于各种矛盾的目标之间作权衡,并要在一定的限制条件下(经费、时间、可用的软、硬件资源等),使上述各方面的需求得到最大限度的满足。4画图板概要设计41画图板功能模块关系与划分功能模块是指数据说明、可执行语句等程序元素的集合,它是指单独命名的可通过名字来访问的过程、函数、子程序或宏调用。功能模块化是将程序划分成若干个功能模块,每个功能模块完成一个子功能,再把这些功能模块总合起来组成一个整体,以满足所要求的整个系统的功能。功能模块化的根据是,如果一个问题有多个问题组合而成,那么这个组合问题的复杂程度将大于分别考虑这个问题时的复杂程度之和。这个结论使得人们乐于利用功能模块化方法将复杂的问题分解成许多容易解决的局部问题。功能模块化方法并不等于无限制地分割软件,因为随着功能模块的增多,虽然开发单个功能模块的工作量减少了,但是设计功能模块间接口所需的工作量也将增加。本画图板的功能模块划分如图所示其中需要扩说明的部分有在基本图形的绘制中有线性绘图和非线性绘图两个部分,此处在设计时我的想法是使用不同的事件响应机制来完成设计。即在绘制直线时使用MOUSEPRESSEVENT和MOUSERELEASEEVENT。获得LASTPOINT和TEMPPOINT两个首尾点,然后调用程序自带的DRAWLINE()函数来完成绘制。而在绘制非线性图形时,此处实现的基本图形有椭圆形,矩形,圆角矩形。此处使用MOUSEPRESSEVENT和MOUSEMOVEEVENT来完成绘制。编辑功能简易画图板画图功能图编辑文件编辑新建打开保存缩放清空线性非线自由绘图基本图形辅助选项颜色线宽铅笔刷子图41画图板功能模块图42画图板总体设计流程图流程程序图是程序分析中最基本、最重要的分析技术,它是进行流程程序分析过程中最基本的工具。它运用工序图示符号对生产现场的整个制造过程做详细的记录,以便对零部件、产品在整个制造过程中的生产、加工、检验、储存等环节待作详细的研究与分析,特别适用于分析生产过程中的成本浪费,提高经济效益。本软件作为一个高度的面向对象的程序,其流程图相对简便,可以简化的概述为从画图板打开,画图或图片编辑,到关闭的整个过程。画图板文件操作整个过程如下图所示图42画图板文件操作程序流程图开始初始化绘图区域是否打开已有图片打开并读入已有图片新建或默认文件绘制和修改图形是否保存保存编辑好的图片文件新建一个画图板退出程序结束YNNY5图43画图板画图功能流程图开始定义并初始化SHAPE参数记录形状COLOR参数记录颜色WIDTH参数记录线宽选择线宽改变画笔属性默认值(黑色)改变画笔属性默认值(W1)选择线色椭圆矩形直线DRAWELIPSEDRAWRECTDRAWLINE鼠标左键按下,响应函数MOUSEPRESSEVENT开始记录坐标点位置鼠标左键按下并移动,响应函数MOUSEMOVEEVENT绘制图形鼠标左键弹起,响应函数MOUSERELEASEEVENT得到图形结束画图板详细设计51画图板界面设计511画图板的界面元素声明在画图板的界面设计中我没有使用QTDESIGNER等UI界面开发工具,而是选用的直接在QTCREATOR中定义并实现了一个WINDOW类,它是继承于QWIDGET的一个子类。在WINDOW类中我们首先使其继承于QMAINWINDOW类,同时在类的定义中加入Q_OBJECT宏。在WINDOWH头文件中加入如下定义代码CLASSWINDOWPUBLICQMAINWINDOWQ_OBJECTPUBLICWINDOWQWIDGETPARENT0/WINDOW类的构造函数和析构函数WINDOWVOIDCREATECOMMANDTOOLBAR/声明命令工具栏,画图工具栏,和菜单栏VOIDCREATEPAINTTOOLBARVOIDCREATEMENUS其次我们在WINDOWH中声明以下内容表51WINDOWH中声明的按钮和对应的槽函数列表界面布局声明的私有类型按钮对象声明的响应槽函数NEWBTNNEWSLOTOPENBTNOPENSLOTSAVEBTNSAVESLOTSAVEASBTNSAVEASSLOTLARGEBTNLARGESLOTSMALLBTNSMALLSLOTCLEARBTNCLEARSLOT定义在PAINT类菜单栏按钮QTOOLBARCOMMANDTOOLBARNORMALBTNNORMALSLOTLINEBTNLINESLOTRECTANGLEBTNRECTSLOTROUNDRECTBTROUNDRECTSLOTELLIPSEBTNELLIPSESLOTPENBTNPENSLOTBRUSHBTNBRUSHSLOTRUBBERBTNRUBBERSLOTCOLORBTNCOLORSLOT工具栏按钮QTOOLBARPAINTTOOLBARSPINBOXSPINBOXVALUECHANGEDINT其次在声明中还应当注意的是QSPINBOXSPINBOXVALUECHANGEDINT/在线宽的选择上采取SPINBOX来方便而精确的记录当前线宽,而不是用信号和槽机制进行响应QACTIONSAVEASACTIONQACTIONEXITACTION/此处声
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/IEC 21122-4:2025 EN Information technology - JPEG XS low-latency lightweight image coding system - Part 4: Conformance testing
- 【正版授权】 ISO 80000-8:2020/Amd 1:2025 EN Quantities and units - Part 8: Acoustics - Amendment 1
- 【正版授权】 ISO 502:2025 EN Hard coal - Determination of caking power - Gray-King coke test
- 【正版授权】 ISO 16625:2025 EN Cranes and hoists - Selection of wire ropes,drums and sheaves
- 【正版授权】 IEC 63380-2:2025 FR Standard interface for connecting charging stations to local energy management systems - Part 2: Specific data model mapping
- 【正版授权】 IEC 60598-2-1:1979 FR-D Luminaires. Part 2: Particular requirements. Section One: Fixed general purpose luminaires
- 【正版授权】 IEC 60269-2:1986 FR-D Low-voltage fuses. Part 2: Supplementary requirements for fuses for use by authorized persons (fuses mainly for industrial application)
- 校园防盗防火安全知识培训课件
- 公孙策面试题及答案
- 煤分析考试题及答案
- 手术室安全细节管理
- 继发性颅脑损伤的护理
- 《保角变换法在求解电势中的应用研究》7500字(论文)
- TCHIA 47-2024 智慧重症病房建设规范
- 多模态技术在智能养鸡工厂中的研究现状与展望
- 征信知识专项培训课件
- 《基于深度强化学习在游戏上的应用》
- 中建给排水工程施工方案
- 电力建设工程施工合同(合同版本)
- 糖尿病饮食的健康宣教
- 《公务员录用体检操作手册(试行)》
评论
0/150
提交评论