画图板的设计与实现毕业论文设计

上传人:仙*** 文档编号:99106919 上传时间:2022-05-31 格式:DOC 页数:59 大小:2.60MB
收藏 版权申诉 举报 下载
画图板的设计与实现毕业论文设计_第1页
第1页 / 共59页
画图板的设计与实现毕业论文设计_第2页
第2页 / 共59页
画图板的设计与实现毕业论文设计_第3页
第3页 / 共59页
资源描述:

《画图板的设计与实现毕业论文设计》由会员分享,可在线阅读,更多相关《画图板的设计与实现毕业论文设计(59页珍藏版)》请在装配图网上搜索。

1、北京邮电大学毕业设计论文任务书第1页毕业设计论文题目:画图板的设计与实现毕业设计论文要求及原始数据资料:1深入了解linux下的qt creator的相关技术;2熟悉使用qt布局管理器的相关技术;3熟练掌握qt UI编辑界面的应用,训练编写程序的能力;4深入分析qt中的信号和槽函数的机制;5设计并实现qt下的画图板的根本功能;6训练检索文献资料和利用文献资料的能力;7训练撰写技术文档与学位论文的能力。第2页 毕业设计论文主要内容:1、 Qt的介绍与具体应用;2、 QT中的信号和槽函数的机制;3、 画图板功能设计;4、 画图板界面设计;5、 画图板涂鸦功能实现;6、 画图板绘制根本图形的实现;7

2、、 实现编辑菜单功能;学生应交出的设计文件论文:1内容完整、层次清晰、表达流畅、排版标准的毕业设计论文;2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。 第3页 主要参考文献资料:1陈英,梁建武.Linux根底及应用教程.水利水电出版社,2021,29422倪继利. Qt以及linux操作系统窗口设计.电子工业出版社,2006,45152 3Blakowski G,Steinmetz R.A media synchronization survey:reference model,specification,and case studiesJ.IEEE Journal S

3、elected Areas in Communications,1996,141:5-354Linux技术及其应用.计算机应用,2000,207:565Linux应用开发详解.机械工业出版社,2004,53686林锐,韩永泉.高质量程序设计指南:C+、C语言.电子工业出版社,2007,1241557Jonathan Corbet,Alessandro Rubini,Greg Koah -Hartman.Linux Device Driver.Jan 20058钱能.C+程序设计教程.清华大学出版社,2006,56889QtEmbedded的嵌入式Linux应用程序的实现,计算机应用与软件,20

4、06,210ISO/IEC JTC1/SC29/WG11.IS14496:Generic coding of moving pictures and associated audio informationMPEG-4.ISO/IEC,2000:101511谭浩强.C+面向对象程序设计.清华大学出版社,2006,8910012王子强,刘海燕,李媛州.Linux以下图形用户界面程序的开发与实现,计算机应用与软件,2005专业班级软件1025班学生南茜要求设计论文工作起止日期2021年3月17日2021年6月27日指导教师签字日期2021年3月17日教研室主任审查签字日期系主任批准签字日期画图板的

5、设计与实现摘 要本文的主要内容是记述同题课程设计中的一些关键技术和辅助文档。本文的目标是设计一款基于Qt编程语言的简易画图板,使其具有涂鸦,绘制根本图形等功能。本程序具有一定的实用意义和价值。功能分装良好可以方便的根据需求进行扩充。本文运用材料综述的方法,首先记述了编程环境的搭建,介绍了Qt的优点,Qt编码标准和Qt的双缓冲机制在绘图中的运用。着重分析了Qt在软件开发中的编程机制,并根据应用特点进行了设计的构件与算法的需求分析。其次在需求分析中给出是可行性分析,然后放入功能分析图和流程图帮助梳理设计思路。最后在详细设计阶段完成编码,实现程序功能,得到一个功能健全的画图板应用程序。在本文中将设计

6、并实现画图板的一些根本功能,例如:新建,翻开,保存,清空,放大,缩小,复原,根本图形绘制,转换画笔颜色等功能。最后运行结果符合设计要求,方案可行。经过测试后程序功能实现良好。关键词 嵌入式Linux QT;图形用户界面;电子画板;双缓冲机制 The Realization of Drawing Board Function Abstract The main content of this paper is described with the course in the design of some key technologies and supporting documents.The

7、goal of this article is to design a simple drawing board based on Qt programming language, make its have graffiti, draw up the basic graph, and other functions.This program has a certain practical significance and value.Function according to the requirements of good packaging can easily expanded. Th

8、is article applies the method of material review, the construction of the first describes the programming environment, this paper introduces the advantages of Qt Qt code conventions and Qt double-buffering mechanism used in the drawing.Qt programming in the software development mechanism is analyzed

9、 emphatically, and the design based on the application of artifacts and requirements analysis of the algorithm.Second is feasibility analysis is given in the requirements analysis, and then into the comb function analysis diagram and flowchart to help design thinking.Program is realized by encoding

10、the detailed design phase is complete, the function, get a functioning drawing board application. Designed and implemented in this paper some basic function of drawing board, for example: the new, open, save, empty, enlarge, shrink, reduction, basic graphics rendering, convert the brush color, and o

11、ther functions.Finally run results conform to the requirements of the design, the scheme is feasible.Program function is good.Key words Linux QT ; graphical user interface (GUI); electronic drawing board; double buffering mechanism目 录摘 要iAbstractii1 引言11.1 研究背景11.2 研究的目的和意义21.3 程序设计的环境选择22 画图板设计的技术背

12、景32.1 Qt的主要特征32.2 QT creator简介32.3 Qt creator环境搭建42.4 QT编程机制信号与槽机制简介52.5 Qt编码标准72.6 GDI绘图理论根底92.7 双缓冲机制92.8 双缓冲技术绘图103 画图板工程需求分析123.1 可行性研究123.1.1 经济可行性123.1.2 技术可行性123.1.3 运行可行性123.1.4 时间可行性123.1.5 法律可行性123.2 功能分析133.3 系统用例分133.4 性能需求133.4.1 应用需求分析143.4.2 运行需求分析143.4.3 其他需求分析144 画图板概要设计154.1 画图板功能模

13、块关系与划分154.2 画图板总体设计流程图165 画图板详细设计175.1 画图板界面设计185.1.1 画图板的界面元素声明185.1.2 图板界面布局实现195.2 画图板功能详细设计205.2.1 画图板的文件编辑功能实现205.2.2 画图板的图片编辑功能实现235.3 画图板绘图功能实现265.3.1 绘图板的根本图形绘制功能实现265.3.2 绘图板自由绘图功能实现305.3.3 画图板画图辅助选项实现336 画图板程序测试356.1 测试的重要性及目的356.2 测试的方法366.3 测试用例366.4 测试结果36结 论38参考文献39致谢40外文原文41中文翻译491 引言

14、随着操作系统不断的更新换代,其自带的画图板界面及功能也是不断变化着,像是xp、vista、win7,它们的画图板的界面布局风格以及功能都有所不同。这说明尽管是简简单单的一个操作系统自带画图板,系统设计人员也没有停止对它的不断研与探索, 他们在不断寻找着更人性化、更能满足群众需求的改变。随着社会的不管开展以及计算机的不断普及,人们对画画的要求越高,对绘图系统也提出了更高更全面的要求。许多用户由于自身的画图习惯或者是视觉效果不同,对传统的画图工具可能感觉不是特别满意。就像孩子总是喜欢画可爱型,而成人那么画实用的。不同年龄不同身份的人,需求不同。综合上述,为了尽量让所有人满意,在此我设计一个大概的程

15、序模型,让别人来试试我的绘图系统。对自从上世纪计算机系统向绘画界的延伸以来,绘图技术已成为计算机系统不可分割的一局部。而图形编辑器又是图形编辑软件的根底,几乎所有的图形编辑软件,都是在拥有根本图形编辑功能的根底上实现更复杂功能的。故在图形应用非常广泛的今天,研究开发绘图系统是非常有意义的。在绘图方面实现绘制直线、矩形、圆形等根本功能,在界面设计方面实现了对图形的操作,从而从底层对绘图系统进行简单的实现。 与此同时,简单小巧的绘图记事功能软件的开展也在蓬勃向前。本软件功能与Windows下附件中的画图软件有类似功能。绘制方面的实现功能包括图片的翻开新建保存,画布的放大缩小,画笔功能实现,根本图形

16、的绘制,绘图时可以选择各种颜色,各种线宽。软件支持保存和读取jpg格式的图形。本软件运用的是面向对象程序设计的思想。相对于面向过程的设计理念,面向对象的设计方法更适用于画图板的设计,它使画图板所涉及的各局部功能模块实现更好的封装。它的特色是。一方法的唯一性,即方法是对软件开发过程全过程进行综合考虑得到的。二是高度的独立性,对象是程序的根本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。三是良好的可扩展性,相对独立的功能模块使得程序可以根据需要进行相印的扩充或是缩减。1.1 研究背景 计算机绘图是相对于手工绘图而言的一种高效率、高质量的绘图技术。手工绘图使用三角板、丁

17、字尺、圆 规等简单工具,是一项细致、复杂和冗长的劳动。不但效率低、质量差,而且周期长,不易于修改。计算机绘图的开展更加趋向于用户需求导向,在一些专业领域中计算机绘图开展迅猛,例如Photoshop、Adobe image 、AutoCAD等。多个程序的聚集,组成功能齐全、能够绘制根本地图图形和各类常用地图的程序组,称为绘图软件系统,或称为绘图软件包。绘图软件通常用高级算法语言编写,以子程序的方式表示,每个子程序具有某种独立的绘图功能。绘图软件包是绘图子程序的聚集,可包括几十个至几百个子程序。用户根据需要,调用其中一局部子程序,绘制某种图形或一幅地图。1.2 研究的目的和意义日常生活中,有很多方

18、面都会用到画图来解决阐述一些问题,这就需要借助计算机来进行简单的画图工作,此时就需要一个能简单解决这些问题的画图软件。本选题是设计一个简单的基于Qt creator的画图软件,能够完成一些简单的画图需求。现在比拟经常使用的是windows系统下附带的画图软件,它根本上可以满足一些简单的画图需求。本设计就是按照这个画图软件的思想设计的,使画图软件能到达满足日常画图需求,便于存储编辑和展示,且要求功耗小且界面人性化,功能易扩展。1.3 程序设计的环境选择Qt类库大致可以分为三个局部:控件,框架和工具。控件局部包括环境控件、主窗口控件、标准对话框、根本的G U I 控件、扩展 G U I控件 、G

19、UI 组织控件以及帮助系统控件 。框架局部包括的是一些抽象的类,通常不可见,如对象模型、抽象控件、绘图、拖放、控件外观。工具局部包括时间日期和链表树等数据结构,它们和 GUI无关普通工具包括链表、堆栈 、队列 、树等常见数据结构,如QArray。图形处理工具控制图像的编码解码算法。如 QImagelO 。IO 控制工具处理 I,0 的一些类,如 QFile。时间和日期工具类处理时间和日期,如 QDate,QTime。在用 Qt 开发程序时,对于 G U I 的设计有两种方法,一种是通过自己写代码来界面进行布局 ,但这就需要对 Ol有一定的熟练程度;另一种是通过 QtDesigner来设计界面,

20、只需在ui文件来拖控件来布局就行了。对只需要用 Qt进行开发的程序员来说,后者显然比前者来的快。以下结合一个实例来介绍用 QtD esigner 来开发程序的 G U I,主窗口类从 Q W idget类派生,这样我们能方便地使用 Qt的 QM enubar类来添加菜单,并使用 Qt的控件类来摆放面板控件 ,整个程序以事件为驱动,通过 Qt的 signalslot机制与终端用户交互。设计好界面后,在程序编译后会生成一个 ui一 h 的头文件里面是一个U i一类,封装了一些所拖放控件的变量名和一个比拟重要的setupUI函数 ,是一些布局的代码。要用到这个界面是只需继承这个类就可以了,或者是包含

21、这个 ui h 的头文件。设计类的主要思想是把所有的信号和槽放在构造函数里,程序是以事件为驱动,当产生一个信号时,会去调用相应的函数。2 画图板设计的技术背景2.1 Qt的主要特征Qt是Trolltech公司的产品,Trolltech是挪威的一家软件公司,主要开发两种产品:一种是跨平台应用程序界面框架;另外一种就是提供应做嵌入式Linux开发的应用程序平台,能够应用到PDA和各种移动设备,Trolltech公司 :/ trolltech /。Qt是一个多平台的C+图形用户界面应用程序框架,它提供应应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象,很容易进行扩展,并且允许

22、真正的组件编程。1996年开始,Qt正式进入商业领域,它成为了全世界范围内数千种成功的应用程序的根底。Qt同时也是流行的Linux桌面环境KDE的根底,注:KDE是所有主要的Linux发行版的一个标准组件。 它具有以下优点: 1优良的跨平台特性Qt支持以下操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。2面向对象Qt 的良好封装机

23、制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为信号与槽 signals/slots 的平安类型来替代 callback,通过一个对象信号的发射,另一个槽函数的响应,使各个对象之间的通信平安而且高效,这使得各个元件之间的协同工作变得十分简单。并且 QT是直接基于 Xlib的,不依赖Motif工具包,所以它的执行效率比一般的基于平台的代码的执行效率要高。3丰富的 APIQt包括多达250个以上的 C+ 类,还提供基于模板的 collections、serialization、 file、I/O device、 directory managemen

24、t、 date/time 类。甚至还包括正那么表达式的处理功能。4支持 2D/3D 图形渲染,支持 OpenGL5大量的开发文档6XML 支持2.2 QT creator简介Qt Creator是跨平台的 Qt 集成开发环境, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境IDE。此 IDE 具有良好的跨平台运行能力,支持的操作系统包括 Linux32 位及 64 位、Mac OS X 以及 Windows。Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务Qt Creator 可以帮助 Qt 用户更

25、加快速便利的运行工程,还可以提高有经验的 Qt 开发人员的工作效率,提高代码的可读性。其中使用强大的 C+ 代码编辑器可实现快速编写代码。语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。使用浏览工具管理源代码。集成了领先的版本控制软件,包括 Git、Perforce 和 Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换。为 Qt跨平台开发人员的需求而量身定制。集成了特定于 Qt 的功能,如信号与槽 (Signals & Slots)图示调试器,

26、 对 Qt 类结构可一目了然集成了 Qt Designer 可视化布局和格式构建器只需单击一下就可生成和运行 Qt 工程。2.3 Qt creator环境搭建 下载Qt源码包到本机,然后解压缩:下载qt-x11-free-3.2.1.tar.gz和qt-x11-opensource-src.tar.gz二进制包。2.在终端切换至qt-x11-free-3.2.1.tar.gz所在目录下,执行:tarzxvf-C/usr/local到/usr/local目录PS:推荐解压缩至/usr/local目录,目录可以根据名称自己创立进入用户主目录编辑该目录下的.bash_profile文件,并设置Qt环

27、境变量,在这里我们以root用户以例。#vi/root/.bash_profile/翻开root用户.bash_profile文件在root用户.bash_profile文件中设置环境变量,在此文件里面添加如下内容:QTDIR=/usr/local/qt-x11-free-3.2.1PATH=$QTDIR/bin:$PATHMANPATH=$QTDIR/doc/man:$MANPATHLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATHexportQTDIRPATHMANPATHLD_LIBRARY_PATH添加完上面信息后按ESC键,“Shife+:组合键回

28、到vi编辑器命令行状态,输入wq!强制保存退出添加完环境变量后,使环境变量立即生效:#source/root/.bash_profile四、进入Qt解压缩的目录#cd$QTDIR或#cdQTDIR。使用configure工具来构建Qt库和它提供的工具:./configure./configure-help配置选择的列表。例:-thread选项来创立这个库的一个多纯种版本。最后一步就要进入漫长的Qt安装编译时间了,有事的就出去办事吧,安装编译时间大约需要两个小时。编译命令:make安装命令:makeinstall。首先我们进入Linux的图形界面,翻开一个控制终端在桌面空间处单击鼠标右键,在弹出

29、的单菜中选择“新建控制终端。,在控制终端里面新建一个.cpp文件,并编写程序,如下:#vi#include#includeintmain(intargc,char*argv)QApplicationapp(argc,argv);QLabel*label=newQLabel(HelloWorld!,0);app.setMainWidget(label);label-show();returnapp.exec();写完上面的代码后保存退出wqvi编辑器。#qmake-project#qmake#make/编译,生成HelloWorld执行文件 图2-1 Qt creator程序构件截图 2.4 Q

30、T编程机制信号与槽机制简介 信号/槽机制是QT区别于其它工具包的最有显著特征的局部。在GUI编程中,当一个widget改变,我们经常希望另外的widget被告知。更普遍地,我们希望任何的对象都可以互相通信。比方,如果用户点击close按钮,我们大多希望调用窗口的close方法。以前的工具集通过callback来实现这种通信。callback是指向函数的指针,因此,假设果你想让处理函数通知你某些事件,你可以传递给另一个函数一个指针来处理函数。处理函数在适当的时候调用callback。Callbacks有两种根本的缺陷:第一,它们不是类型平安的,我们无法确定处理程序会调用正确参数的回调函数(cal

31、lback)。第二,回调函数耦合于处理函数,因为处理函数必须知道去调用哪个回调函数。Qt提供了回调的替代技术:信号和槽。当特定事件发生时引发相应的信号。Qt的widget有许多预定义的信号,同时我们也可以为widget子类添加我们自定义的信号。槽是回应特定的信号时所调用的方法。Qt的窗口部件有许多预定义的槽,但是我们也可以为窗口部件的子类田间我们自定义的槽,以处理我们所感兴趣的信号。信号槽机制是类型平安的:信号的签名必须跟接受的槽的签名相匹配事实上,槽的签名可以比信号的签名短,因为它可以忽略额外的字段。因为签名是相容的,编译器就可以帮我们检测类型的不匹配。信号和槽是松耦合的:一个类产生一个信号

32、,并不知道而且不关心那个槽接受该信号。Qt的信号槽机制保证,如果你连接了一对信号槽,槽会在适当的时间带着信号的参数被调用。信号和槽可以附带任何类型任何数量的参数。信号和槽是完全类型平安的。槽可以用来接受信号,不过槽也是普通的成员函数。类似于对象不知道谁接受它的信号,槽也不知道是否有信号连接自己。这保证了Qt可以创立完全独立的组件。一个信号可以连接无数的槽,并且一个槽可以连接你想要连接的信号。甚至可以直接连接两个信号当第一个信号产生,立即产生第二个信号。信号和槽一起形成了一种强大的组件编程机制。QT的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。

33、信号和槽可以使用任何数量、任何类型的参数。它们是完全类型平安的:不会再有回调核心转储core dump。可以把许多信号和你所希望的单一槽相连,并且一个信号也可以和所期望的许多槽相连。把一个信号和另一个信号直接相连也是可以的。总体来看,信号和槽构成了一个强有力的组件编程机制。如果一个类要使用信号与槽机制,它就必须是从QObject或QObject的子类继承,而且类的定义必须加上Q_OBJECT宏。signals、slots和emit是QT特有的关键字,分别用来表示信号、槽、和发送信号,移除这些关键字和预处理程序,就可以使用“标准的C+编译器678。槽同其他函数一样也具有访问权限,只是槽的访问权限

34、决定了谁可以和它相连,如一个public slots:包含了任何信号都可以相连的槽。一个protected slots:包含了只有这个类和它的子类的信号才能连接的槽。这就是说这些槽只是类的实现的一局部,而不是它和外界的接口。 一个private slots:包含了只有这个类本身的信号可以连接的槽,甚至它的子类都没有获得连接的权利。 图2-2信号与槽机制示意图2.5 Qt编码标准第一条:尽量不要直接引用 QT 例如或其它符合 GPL 协议的程序源代码中源代码如果引用了Qt例如程序,请试图在内部使用不同的代码行来组织它。如果直接使用了Qt的源代码文件,请保存位于文件首部的版权声明。如果您使用了别人

35、编写的源代码,那么需要取得相关的使用许可文书。但是如果你从建议中获得的仅仅是一些想法,而不是你实际上使用的代码,你也不需要文书。尽量不要对Qt的源代码进行修改,如果为了某重要需求而一定要对Qt源代码进行修改,那么一定要在源代码中修改的位置做详细的说明,并署名。另外还要书写详细的修改文档。 第二条:工程文件命名遵循的原那么工程文件.pro命名采用:工程名.pro的方式.ptro文件中 HEARDERS 和 SOURCE行中如果有多个文件名一般都会有的,那么使用“将他们隔开,并且使每一个文件名单独占一行。原那么上文件名的先后顺序没有限制,但是一般的惯例是将依赖性最小的文件写在最前面,工程的主程序一

36、般是 main.cpp往往出现在 source的最后。一般将 TARGET行写在 HEARDERS 和 SOURCE的下面。下面是范例:SOURCE=HELLO.CPPmain.cppTARGET=hello工程中所有文件和目录命名中的字母一律使用小写,以保持在windows环境下的兼容性。第三条:函数注释三局部,功能、参数和返回值每个程序都应该以一段简短地、说明其功能的注释开头。请为每个函数书写注释以说明函数做了些什么。如果有参数和返回值,也需要对其进行解释。第四条:变量、定义等注释对于每个静态变量和全局变量,请添加相应的注释语句。对于重要的变量、定义等进行注释。第五条:变量和函数的命名原那

37、么变量名或函数名中使用大写字符来区分各个局部,以便于记忆和阅读。全局包括类中的变量用长名字,局部变量用短名字。类成员变量前应加上 m_,全局变量加上 g_,仅与本模块有关的变量加上 l_。如果定义Qt类库中某种类型的变量,采用将类名中大写字母提取出并合并成小写的缩写字符串的方法去掉第一个 Q,如:QLineEdit *m_leInputNum;QString *m_sName; 如果程序中出现了两个类名缩写一样的问题,如:QToolBar 和 QToolButton的缩写都是tb,这时应将其中一个类的缩写进行变动,变动的准那么以能够防止冲突,同时缩写能够表达类名为准。如这里可以将 QToolB

38、ar 的缩写为 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

39、()。另外,信号和槽的参数必须完全对应。在用connect 进行连接的时候,信号和槽中的参数可以只写参数类型。根本结构是数个以大写字母开头的单词。返回自定义private变量值的函数命名建议以get开头,如getLength()可以表示取回成员变量 m_nlength() 等;设置自定义private变量的函数命名建议以 set开头,如SetLength()可以表示设置成员变量 m_nlength()等。这样做是为了防止与Qt类中的函数名发生冲突。全局函数命名请以小写g开头。第六条:自定义类的命名原那么自定义类一般有两个文件,一个头文件,一 个实现体cpp。文件名采用被封装的类名,但是一律小写

40、。如果一些结构或宏仅与本类有关,可在类头文件中定义。任何自定义类命名不要以Q开头,以免与 Qt 类库中的类混淆。对自定义的类命名建议以大写字母 开头MMCP,表达一定版权信息,并且在文件列表时自定义类会依次排在列表的前部。如果需要自定义一个基类,请确保该基类的类名以base结束。工程的界面类一般从 QwigdetQMainWindowQDialog类继承,工程主界面类的命名采用“工程名MainWindow方式,如:AChartMainWindow即表示Chart工程的主界面类。主界面类往往在程序的开头main函数处构造,建议将构造主界面类的语句main函数放在 main.cpp中。对于一般的窗

41、体,请在类名的最后表达窗体的类型,一般的方法是如果从Qwidget 继承而来,那么以Widget结尾,如果从QMainWindow继承而来那么以Window结尾,从QDialog继承而来,那么以Dialog结尾。如果在自定义类中从Qt某个类继承,如果覆盖了父类中某个函数,请在该函数的声明旁边注明。第七条:类声明体中的编排在类的声明体中,请按照:Q_OBJECT、public:signals:、slots:、protected:private:,的顺序将成员变量和函数进行排列。如果需要在这个类class中声明某种数据类型结构、枚举等,请将这个声明放在所有成员变量和成员函数的前面。如果在一种类型的

42、声明中,即有成员变量,又有函数声明,请使用两个相同的类型声明将它们隔开,如:Private:Void function();Private:Int m_number;对一般的界面类,如果使用了信号槽,那么 class声明的第一行必须是 Q_Object建议防止使用protected类型的成员函数或者成员变量,因为在Qt中,大量的事件处理函数槽均是以protected类型出现的。第九条:工程中目录的使用工程中的图片建议以JPEG.PNG格式防止使用gif,统一保存在“./pics目录中。工程使用的汉化相关文件.po和.qm放在“./i18/目录中。工程的临时交换目录请以宏的形式定义建议使用“./

43、temp/,不要使用固定目录。另外,请不要使用“./temp/目录名这个目录名在Qt for windows的版本中有特殊意义。第九条:界面布局原那么制作 Qt界面的时候,请尽量使用布局管理器QLayout进行布局管理,防止使用绝对坐标,除非你能够绝对肯定这个界面的尺寸是完全不会变换的。如果某个区域出现了很多控件,在保证不会影响程序控制结构的前提下,请将这些控件放在一个可以包含其它窗口控件的盒子如QWidget,QFrame,QGroupBox中,然后再让这个盒子出现在界面上即这些控件以整体形式出现。书写界面上的英文长度的时候,请与对应的中文进行比拟,确保汉化后中文能够被完全显示。代码中如果出

44、现了需要在界面上出现的文字,必须用英文表示,并且使用tr函数将其包含。如:tr(“message!)不能在程序中将这些文字直接用中文替换。2.6 GDI绘图理论根底 任何图形程序的输出,都离不开图形设备接口GDIGraphicDeviceInterface,它是管理Windows应用程序在窗口内的绘图操作和与此相关的许多其它信息。如图形设备打印机、显示器的信息、绘图的坐标系统和映射模式、绘图工具的当前状态什么样的画笔、画刷、文本的前景色与背景色、文本所使用的字体7。Windows的GDI绘制的各种图形点、线、圆、多边形、矩形等是与设备无关的,即在屏幕的窗口内绘图与在打印机上绘图是相似的。GDI

45、是一个可执行程序,它接收Windows应用程序的绘图请求表现为GDI调用,并将它们传送给相应的设备驱动程序,再由设备驱动程序驱动相应的硬件设备,如打印机或显示器输出。应用程序使用GDI可以对三种类型的图形进行操作:文本操作、矢量图形操作和光栅图形操作图像操作。(1)文本操作是以逻辑坐标为单位来计算文本的输出位置,用户可以通过各种GDI函数来作出具有各种效果的文本。(2)矢量图形指的是利用画点、直线、曲线折线、贝塞尔曲线等、多边形、扇形、矩形等函数所绘制的图形。(3)光栅图形操作是指以光栅图形函数对以位图形式存储的数据进行操作,它包括各种位图和图标的输出,其在屏幕上表现为对假设干个行和列的像素操

46、作。光栅图形操作是直接从内存到显存的拷贝操作,其缺点是需要额外的内存空间,优点是操作速度快。2.7 双缓冲机制所谓“双缓冲区,故名思义就是要有俩缓冲区简称A和B。这俩缓冲区,总是一个用于生产者进行输入缓存,另一个用于消费者进行输出读取。当俩缓冲区都操作完,再进行一次交替切换先前被生产者写入的转为消费者读出,先前消费者读取的转为生产者写入。以此实现生产者和消费者不会同时操作在同一个缓冲区,就防止了发生冲突,因此也不需要在读写每一个数据单元时都进行同步/互斥操作。双缓冲展现了空间换时间的优化思路。为了解决双缓冲问题,我们需要定义两个互斥锁简称La和Lb,分别对应俩缓冲区。生产者或消费者如果要操作某

47、个缓冲区,必须先拥有对应的互斥锁。Qt的双缓冲技术double buffering是Qt绘画机制的一局部,是一种在Qt4中被全面采用的技术。其核心是:把一个窗口部件渲染到一个脱屏pixmapoff- screen pixmap中,然后再把这个pixmap复制到显示屏幕上。这样做的目的是用于消除屏幕的闪烁并且因而界面会显得更漂亮。Qt4中,Qt会自动处理这些情况,所以在普通的绘画中,我们不必要关注这些内容。在更详细的说明这一技术前,简单介绍一下Qt的绘画机制。Qt的绘画机制本质上是提供了2个工具:QPainter和 QPaintDevice,分别代表人类世界的画笔和画板。Gemfield要完成一

48、次绘画,就必须有个画笔QPainter,另外,还得解决画笔画在哪儿画板,QPaintDevice的问题。Qt中的画板是QPaintDevice,当然,gemfield用到的都是它的子类,也就是具体哪种画板:它们是:QWidget、 QImage、QPicture、 QPixmap等,也就是每一个可见的控件QWidget的子类都是画板在其paintEvent()里绘画。2.8 双缓冲技术绘图当要绘制屏幕时,我们只要调用paint函数即可。其中我们可以使用绘图方法来绘制任何文字图形图像。可是当我们绘制的东西多了之后,你就会发现又是屏幕上的显示根本不是我们要的结果,很杂乱。我们知道,如果窗体在响应绘

49、图消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。因为窗体在刷新时,总要有一个擦除原本图象的过程,此时程序会利用背景色填充窗体绘图区,然后再调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越创造显。于是我们就看到了闪烁现象。因此,双缓冲区就提供了一个完美的解决方案。我们可以在缓冲区2中绘制图像,而是用缓冲区1来输出到屏幕。这样我们就可以控制绘制和现实的过程,从而防止上面的现象。双缓冲即在内存中创立一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次

50、性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度。双缓冲实现过程如下:(1)在内存中创立与画布一致的缓冲区(2)在缓冲区画图 (3)将缓冲区位图拷贝到当前画布上 (4)释放内存缓冲区其实,在这样一个简单的绘图工作中,这样的技术大可不必。而且随着半导体技术的进步,双缓冲所能发挥出的功能相对减少。另外一个不容无视的问题是,使用双缓冲技术会增加系统的负载。因为相比普通的绘制,它多出了一些工作。比方在SYSZUXpad上运行 GemfieldFuwaArrow程序时,双缓冲时cpu的利用率是50%,而没有采用双缓冲时,cpu的利用率是37%。双缓冲和直接绘制的区别示意图如下: 图2-1双缓冲

51、绘图原理图3 画图板工程需求分析3.1 可行性研究该阶段通过对系统目标的初步调研和分析,提出可行性方案并进行论证。我们在这里主要从技术可行性、经济可行性和操作可行性等方面进行分析。3.1.1 经济可行性开发该系统所需的相关资料可以通过对现已存在的相关系统进行调查采集,所需的应用软件、硬件系统也易于获得,因此开发本钱较低。而引进使用本系统后,与传统方式相比,具有高效率、低本钱、高质量的特点,可以节省不少人力、物力及财力。所以,从经济的角度来看,该系统可行。3.1.2 技术可行性技术可行性要考虑现有的技术条件是否能够顺利完成开发工作,软硬件配置是否能够满足开发需求等等。本系统使用JSP开发语言,调

52、试相对简单,当前的计算机硬件配置也完全能够满足开发的需求,因此在技术上是绝对可行的。软件方面,由于目前单机模式相对开展成熟,故软件的开发平台成熟可行,它们速度快、容量大、可靠性能高、价格低,完全能满足系统的需求。本系统的开发,是典型的面向对象系统,采用Qt编程语言,已无技术上的问题。3.1.3 运行可行性运行可行性是对组织结构的影响、现有人员、机构和环境对系统的适应性以及人员培训补充方案的可行性。当前信息化技术已经相当普及,各类操作人员水平都有相当的高度,所以在运行上是可行的。3.1.4 时间可行性从时间上看,在两个月的时间里补充相关知识并完成系统的开发,虽然有些紧张,但却并非不可实现。通过这

53、两个多月的不懈努力,系统功能已根本实现。3.1.5 法律可行性1所有技术资料都为合法。2开发过程中不存在知识产权问题。3未抄袭任何系统,不存在侵犯版权问题。4开发过程中未涉及任何法律责任。综上所述,本系统的开发从技术上、经济上、法律上都是完全可靠的。 需求分析是一个软件的根底。如果没有正确的需求分析就不能做出满意的软件。所以可以说,需求分析是一个软件设计的灵魂。所以在任何系统开发之前,都用该进行相应的需求分析。需求分析的精准度越高,开发出来的程序稳靠行就越高,所需费用就会降低。反之,做出来的程序平安系数不高,还会增加开发费用,造成人力物力资源的严重浪费。3.2 功能分析我作的是Qt creat

54、or下的画图板。在设计时需要考虑用户的需求和画图的习惯。例如习惯上的工具面板应该是竖排放置,而编辑菜单应该放置在横排。在进行具体的软件实际设计之前,应先对使用过程中用户可能需要并在本程序中应当实现的功能等进行整理,并列一个简要的提纲,如下:(1)画板新建功能:新建初始画板。(2)画板保存、另存为功能:在对画板进行编辑之后,可以选择保存或者另存为。(3)画板的翻开功能:可以翻开原来编辑并保存过的画板。(4)画板放大功能:图片可逐级放大尺寸。(5)画板缩小功能:图片可逐级缩小尺寸。(6)画板复原功能:画板通过不同尺寸的放大和缩小后,能够复原到初始新建的尺寸大小。(7)画板清空功能:画板可以在当前任

55、何状态下进行对当前状态的清空,回到初始新建画板状态。(8)画板画图工具功能:画板可以实现选择图形、画笔线宽、画笔颜色等功能。(9)画板的图形选择功能:画直线、圆形、矩形、圆角矩形。(10)图片翻开、编辑、保存功能:可以翻开一些格式的图片,如png、bmp等,并且可以作为画板背景,在其做编辑并且保存Diagram。3.3 系统用例分翻开保存新建清屏文件操作界面操作缩放用户自由绘图绘制根本图形颜色选择 绘图线宽选择图4-1显示了画图板使用人操作的功能模块。包括了新建翻开保存,画图板的缩放,清屏,绘制根本图形,画笔刷子橡皮,改变颜色,改变线宽图3-1 功能分析用例图3.4 性能需求为了保证系统能够长

56、期、稳定、平安、可靠、高效地运行,系统处理的准确性和及时性是系统的必要性能。作为系统中很多数据的来源,本系统的添加功能对于整个系统的功能及性能举足轻重,其准确性和及时性很大程度上决定了系统的成败,因此在开发过程中,必须采用一定的方法保证系统的准确性和及时性。3.4.1 应用需求分析系统的性能要求通常是对系统需要的存储容量以及后援存储、重新启动和平安性、运行效率等方面的考虑。 软件方面:通过虚拟机软件,你可以在一台物理计算机上模拟出另一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。对于你而言,它只是运行在你物理计算机上的

57、一个应用程序,但是对于在虚拟机中运行的应用程序而言,它就是一台真正计算机。因此,当你在虚拟机中进行软件评测时,可能系统一样会崩溃;但是,崩溃的只是虚拟机上的操作系统,而不是物理计算机上的操作系统,并且,使用虚拟机的“Undo1恢复功能,你可以马上恢复虚拟机到安装软件之前的状态。虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机Vm

58、ware,VirtualBox,Virtual pc不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样消耗时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机那么可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。流行的虚拟机软件有VMware(VMWare ACE、Virtual Box和Virtual PC,它们都能在Windows系统上虚拟出多个计算机。3.4.2 运行需求分析硬件条件:酷睿2 CPU、1G RAM、10 G以上硬盘的PC机。软件条件:装载ubantu虚拟机,

59、Qt creator。3.4.3 其他需求分析本系统具有较好的可维护性、可靠性、可理解性以及运行效率,易于用户理解和操作。可维护性包括了可读性、可修改性、可测试性等含义;可靠性那么通常包括正确性和健壮性。在系统开发过程中,要于各种矛盾的目标之间作权衡,并要在一定的限制条件下经费、时间、可用的软、硬件资源等,使上述各方面的需求得到最大限度的满足。4 画图板概要设计4.1 画图板功能模块关系与划分功能模块是指数据说明、可执行语句等程序元素的集合,它是指单独命名的可通过名字来访问的过程、函数、子程序或宏调用。功能模块化是将程序划分成假设干个功能模块,每个功能模块完成一个子功能,再把这些功能模块总合起

60、来组成一个整体,以满足所要求的整个系统的功能。功能模块化的根据是,如果一个问题有多个问题组合而成,那么这个组合问题的复杂程度将大于分别考虑这个问题时的复杂程度之和。这个结论使得人们乐于利用功能模块化方法将复杂的问题分解成许多容易解决的局部问题。功能模块化方法并不等于无限制地分割软件,因为随着功能模块的增多,虽然开发单个功能模块的工作量减少了,但是设计功能模块间接口所需的工作量也将增加。本画图板的功能模块划分如下图: 编辑功能 简易画图板 画图功能图编辑文件编辑新建翻开保存缩放清空线性非线自由绘图根本图形辅助选项颜色线宽铅笔刷子 图4-1 画图板功能模块图其中需要扩说明的局部有:在根本图形的绘制

61、中有线性绘图和非线性绘图两个局部,此处在设计时我的想法是使用不同的事件响应机制来完成设计。即在绘制直线时使用mousePressEvent()和mouseReleaseEvent()。获得lastPoint和tempPoint两个首尾点,然后调用程序自带的drawLine函数来完成绘制。而在绘制非线性图形时,此处实现的根本图形有:椭圆形,矩形,圆角矩形。此处使用mousePressEvent()和mouseMoveEvent()来完成绘制。4.2 画图板总体设计流程图 流程程序图是程序分析中最根本、最重要的分析技术,它是进行流程程序分析过程中最根本的工具。它运用工序图示符号对生产现场的整个制造过程做详细的记录,以便对零部件、产品在整个制造过程中的生产、加工、检验、储存等环节待作详细的研究与分析,特别适用于分析生产过程中的本钱浪费,提高经济效益。本软件作为一个

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!