画图板的设计与实现.docx
- 文档编号:25021771
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:68
- 大小:2.34MB
画图板的设计与实现.docx
《画图板的设计与实现.docx》由会员分享,可在线阅读,更多相关《画图板的设计与实现.docx(68页珍藏版)》请在冰豆网上搜索。
画图板的设计与实现
北京邮电大学
毕业设计(论文)任务书
第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,29-42
[2]倪继利.Qt以及linux操作系统窗口设计.电子工业出版社,2006,45-152
[3]BlakowskiG,SteinmetzR.Amediasynchronizationsurvey:
referencemodel,specification,andcasestudies[J].IEEEJournalSelectedAreasinCommunications,1996,14
(1):
5-35
[4]金西,黄汪.嵌入式Linux技术及其应用.计算机应用,2000,20(7):
5-6
[5]刘峥嵘.嵌入式Linux应用开发详解.机械工业出版社,2004,53-68
[6]林锐,韩永泉.高质量程序设计指南:
C++、C语言.电子工业出版社,2007,124-155
[7]JonathanCorbet,AlessandroRubini,GregKoah-Hartman.LinuxDeviceDriver.Jan2005
[8]钱能.C++程序设计教程.清华大学出版社,2006,56-88
[9]任善全,吕强,钱培德等.一个基于QtEmbedded的嵌入式Linux应用程序的实现,计算机应用与软件,2006,2
[10]ISO/IECJTC1/SC29/WG11.IS14496:
Genericcodingofmovingpicturesandassociatedaudioinformation(MPEG-4).ISO/IEC,2000:
10-15
[11]谭浩强.C++面向对象程序设计.清华大学出版社,2006,89-100
[12]王子强,刘海燕,李媛州.Linux下图形用户界面程序的开发与实现,计算机应用与软件,2005
专业班级
软件1025班
学生
南茜
要求设计(论文)工作起止日期
2014年3月17日~2014年6月27日
指导教师签字
日期
2014年3月17日
教研室主任审查签字
日期
系主任批准签字
日期
画图板的设计与实现
摘要
本文的主要内容是记述同题课程设计中的一些关键技术和辅助文档。
本文的目标是设计一款基于Qt编程语言的简易画图板,使其具有涂鸦,绘制基本图形等功能。
本程序具有一定的实用意义和价值。
功能分装良好可以方便的根据需求进行扩充。
本文运用材料综述的方法,首先记述了编程环境的搭建,介绍了Qt的优点,Qt编码规范和Qt的双缓冲机制在绘图中的运用。
着重分析了Qt在软件开发中的编程机制,并根据应用特点进行了设计的构件与算法的需求分析。
其次在需求分析中给出是可行性分析,然后放入功能分析图和流程图帮助梳理设计思路。
最后在详细设计阶段完成编码,实现程序功能,得到一个功能健全的画图板应用程序。
在本文中将设计并实现画图板的一些基本功能,例如:
新建,打开,保存,清空,放大,缩小,还原,基本图形绘制,转换画笔颜色等功能。
最后运行结果符合设计要求,方案可行。
经过测试后程序功能实现良好。
关键词嵌入式LinuxQT;图形用户界面;电子画板;双缓冲机制
TheRealizationofDrawingBoardFunction
Abstract
Themaincontentofthispaperisdescribedwiththecourseinthedesignofsomekeytechnologiesandsupportingdocuments.ThegoalofthisarticleistodesignasimpledrawingboardbasedonQtprogramminglanguage,makeitshavegraffiti,drawupthebasicgraph,andotherfunctions.Thisprogramhasacertainpracticalsignificanceandvalue.Functionaccordingtotherequirementsofgoodpackagingcaneasilyexpanded.
Thisarticleappliesthemethodofmaterialreview,theconstructionofthefirstdescribestheprogrammingenvironment,thispaperintroducestheadvantagesofQtQtcodeconventionsandQtdouble-bufferingmechanismusedinthedrawing.Qtprogramminginthesoftwaredevelopmentmechanismisanalyzedemphatically,andthedesignbasedontheapplicationofartifactsandrequirementsanalysisofthealgorithm.Secondisfeasibilityanalysisisgivenintherequirementsanalysis,andthenintothecombfunctionanalysisdiagramandflowcharttohelpdesignthinking.Programisrealizedbyencodingthedetaileddesignphaseiscomplete,thefunction,getafunctioningdrawingboardapplication.
Designedandimplementedinthispapersomebasicfunctionofdrawingboard,forexample:
thenew,open,save,empty,enlarge,shrink,reduction,basicgraphicsrendering,convertthebrushcolor,andotherfunctions.Finallyrunresultsconformtotherequirementsofthedesign,theschemeisfeasible.Programfunctionisgood.
KeywordsLinuxQT;graphicaluserinterface(GUI);
electronicdrawingboard;doublebufferingmechanism
1引言
随着操作系统不断的更新换代,其自带的画图板界面及功能也是不断变化着,像是xp、vista、win7,它们的画图板的界面布局风格以及功能都有所不同。
这表明尽管是简简单单的一个操作系统自带画图板,系统设计人员也没有停止对它的不断研与探索,他们在不断寻找着更人性化、更能满足大众需求的改变。
随着社会的不管发展以及计算机的不断普及,人们对画画的要求越高,对绘图系统也提出了更高更全面的要求。
许多用户由于自身的画图习惯或者是视觉效果不同,对传统的画图工具可能感觉不是特别满意。
就像孩子总是喜欢画可爱型,而成人则画实用的。
不同年龄不同身份的人,需求不同。
综合上述,为了尽量让所有人满意,在此我设计一个大概的程序模型,让别人来试试我的绘图系统。
对自从上世纪计算机系统向绘画界的延伸以来,绘图技术已成为计算机系统不可分割的一部分。
而图形编辑器又是图形编辑软件的基础,几乎所有的图形编辑软件,都是在拥有基本图形编辑功能的基础上实现更复杂功能的。
故在图形应用非常广泛的今天,研究开发绘图系统是非常有意义的。
在绘图方面实现绘制直线、矩形、圆形等基本功能,在界面设计方面实现了对图形的操作,从而从底层对绘图系统进行简单的实现。
与此同时,简单小巧的绘图记事功能软件的发展也在蓬勃向前。
本软件功能与Windows下附件中的画图软件有类似功能。
绘制方面的实现功能包括图片的打开新建保存,画布的放大缩小,画笔功能实现,基本图形的绘制,绘图时可以选择各种颜色,各种线宽。
软件支持保存和读取jpg格式的图形。
本软件运用的是面向对象程序设计的思想。
相对于面向过程的设计理念,面向对象的设计方法更适用于画图板的设计,它使画图板所涉及的各部分功能模块实现更好的封装。
它的特色是。
一方法的唯一性,即方法是对软件开发过程全过程进行综合考虑得到的。
二是高度的独立性,对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。
三是良好的可扩展性,相对独立的功能模块使得程序可以根据需要进行相印的扩充或是缩减。
1.1研究背景
计算机绘图是相对于手工绘图而言的一种高效率、高质量的绘图技术。
手工绘图使用三角板、丁字尺、圆规等简单工具,是一项细致、复杂和冗长的劳动。
不但效率低、质量差,而且周期长,不易于修改。
计算机绘图的发展更加趋向于用户需求导向,在一些专业领域中计算机绘图发展迅猛,例如Photoshop、Adobeimage、AutoCAD等。
多个程序的汇集,组成功能齐全、能够绘制基本地图图形和各类常用地图的程序组,称为绘图软件系统,或称为绘图软件包。
绘图软件通常用高级算法语言编写,以子程序的方式表示,每个子程序具有某种独立的绘图功能。
绘图软件包是绘图子程序的汇集,可包括几十个至几百个子程序。
用户根据需要,调用其中一部分子程序,绘制某种图形或一幅地图。
1.2研究的目的和意义
日常生活中,有很多方面都会用到画图来解决阐述一些问题,这就需要借助计算机来进行简单的画图工作,此时就需要一个能简单解决这些问题的画图软件。
本选题是设计一个简单的基于Qtcreator的画图软件,能够完成一些简单的画图需求。
现在比较经常使用的是windows系统下附带的画图软件,它基本上可以满足一些简单的画图需求。
本设计就是按照这个画图软件的思想设计的,使画图软件能达到满足日常画图需求,便于存储编辑和展示,且要求功耗小且界面人性化,功能易扩展。
1.3程序设计的环境选择
Qt类库大致可以分为三个部分:
控件,框架和工具。
控件部分包括环境控件、主窗口控件、标准对话框、基本的GUI控件、扩展GUI控件、GUI组织控件以及帮助系统控件。
框架部分包括的是一些抽象的类,通常不可见,如对象模型、抽象控件、绘图、拖放、控件外观。
工具部分包括时间日期和链表树等数据结构,它们和GUI无关普通工具包括链表、堆栈、队列、树等常见数据结构,如QArray。
图形处理工具控制图像的编码/解码算法。
如QIm—agelO。
I/O控制工具处理I,0的一些类,如QFile。
时间和日期工具类处理时间和日期,如QDate,QTime。
在用Qt开发程序时,对于GUI的设计有两种方法,一种是通过自己写代码来界面进行布局,但这就需要对Ol有一定的熟练程度;另一种是通过QtDesigner来设计界面,只需在ui文件来拖控件来布局就行了。
对只需要用Qt进行开发的程序员来说,后者显然比前者来的快。
以下结合一个实例来介绍用QtDesigner来开发程序的GUI,主窗口类从QWidget类派生,这样我们能方便地使用Qt的QMenubar类来添加菜单,并使用Qt的控件类来摆放面板控件,整个程序以事件为驱动,通过Qt的signal—slot机制与终端用户交互。
设计好界面后,在程序编译后会生成一个ui一.h的头文件.里面是一个Ui一类,封装了一些所拖放控件的变量名和一个比较重要的setupUI函数,是一些布局的代码。
要用到这个界面是只需继承这个类就可以了,或者是包含这个ui~.h的头文件。
设计类的主要思想是把所有的信号和槽放在构造函数里,程序是以事件为驱动,当产生一个信号时,会去调用相应的函数。
2
画图板设计的技术背景
2.1Qt的主要特征
Qt是Trolltech公司的产品,Trolltech是挪威的一家软件公司,主要开发两种产品:
一种是跨平台应用程序界面框架;另外一种就是提供给做嵌入式Linux开发的应用程序平台,能够应用到PDA和各种移动设备,Trolltech公司网址:
Qt是一个多平台的C++图形用户界面应用程序框架,它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。
Qt是完全面向对象,很容易进行扩展,并且允许真正的组件编程。
1996年开始,Qt正式进入商业领域,它成为了全世界范围内数千种成功的应用程序的基础。
Qt同时也是流行的Linux桌面环境KDE 的基础,注:
KDE是所有主要的Linux发行版的一个标准组件。
它具有以下优点:
1)优良的跨平台特性
Qt支持下列操作系统:
MicrosoftWindows95/98,MicrosoftWindowsNT,Linux,Solaris,SunOS,HP-UX,DigitalUNIX(OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX等等。
2)面向对象
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt提供了一种称为信号与槽(signals/slots)的安全类型来替代callback,通过一个对象信号的发射,另一个槽函数的响应,使各个对象之间的通信安全而且高效,这使得各个元件之间的协同工作变得十分简单。
并且QT是直接基于Xlib的,不依赖Motif工具包,所以它的执行效率比一般的基于平台的代码的执行效率要高。
3)丰富的API
Qt包括多达250个以上的C++类,还提供基于模板的collections、serialization、file、I/Odevice、directorymanagement、date/time类。
甚至还包括正则表达式的处理功能。
4)支持2D/3D图形渲染,支持OpenGL
5)大量的开发文档
6)XML支持
2.2QTcreator简介
QtCreator是跨平台的Qt集成开发环境,QtCreator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。
此IDE具有良好的跨平台运行能力,支持的操作系统包括Linux(32位及64位)、MacOSX以及Windows。
QtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务
QtCreator可以帮助Qt用户更加快速便利的运行项目,还可以提高有经验的Qt开发人员的工作效率,提高代码的可读性。
其中使用强大的C++代码编辑器可实现快速编写代码。
语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。
使用浏览工具管理源代码。
集成了领先的版本控制软件,包括Git、Perforce和Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换。
为Qt跨平台开发人员的需求而量身定制。
集成了特定于Qt的功能,如信号与槽(Signals&Slots)图示调试器,对Qt类结构可一目了然集成了QtDesigner可视化布局和格式构建器只需单击一下就可生成和运行Qt项目。
2.3Qtcreator环境搭建
下载Qt源码包到本机,然后解压缩:
下载qt-x11-free-3.2.1.tar.gz和qt-x11-opensource-src.tar.gz二进制包。
2.在终端切换至qt-x11-free-3.2.1.tar.gz所在目录下,执行:
tar zxvf qt-x11-free-3.2.1.tar.gz -C /usr/local
已同样的方法将qt-x11-opensource-src-.tar.gz源码包解压缩 到/usr/local目录 PS:
(推荐解压缩至/usr/local目录,目录可以根据名称自己创建) 进入用户主目录编辑该目录下的.bash_profile文件,并设置Qt环境变量,在这里我们以root用户以例。
#vi /root/.bash_profile //打开root用户.bash_profile文件
在root用户.bash_profile文件中设置环境变量,在此文件里面添加如下内容:
QTDIR=/usr/local/qt-x11-free-3.2.1 PATH=$QTDIR/bin:
$PATH
MANPATH=$QTDIR/doc/man:
$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:
$LD_LIBRARY_PATH export QTDIR PATH MANPATHLD_LIBRARY_PATH
添加完上面信息后按ESC键,“Shife+:
”组合键回到vi编辑器命令行状态,输入wq!
(强制保存退出)
添加完环境变量后,使环境变量立即生效:
#source /root/.bash_profile 四、进入Qt解压缩的目录 #cd $QTDIR或#cd /usr/local/qt-x11-free-3.2.1都可以,因为在/root/.bash_profile文件已经定义了环境变量QTDIR=/usr/local/qt-x11-free-3.2.1和export QTDIR 。
使用configure工具来构建Qt库和它提供的工具:
./configure(./configure --help 配置选择的列表。
例:
-thread选项来创建这个库的一个多纯种版本。
)
最后一步就要进入漫长的Qt安装编译时间了,有事的就出去办事吧,安装编译时间大约需要两个小时。
编译命令:
make 安装命令:
make install 。
首先我们进入Linux的图形界面,打开一个控制终端(在桌面空间处单击鼠标右键,在弹出的单菜中选择“新建控制终端”。
),在控制终端里面新建一个.cpp文件,并编写程序,如下:
#vi HelloWorld.cpp //建立一个HelloWorld.cpp文件
#include
int main(int argc,char *argv[]) {
QApplication app(argc,argv);
QLabel *label=new QLabel("Hello World!
!
!
",0); app.setMainWidget(label); label->show(); return app.exec(); }
写完上面的代码后保存退出(wq)vi编辑器。
#qmake -project //把.cpp文件编译成.pro文件 #qmake //通过.pro文件自动创建Makefile文件 #make //编译,生成HelloWorld执行文件
图2-1Qtcreator程序构件截图
2.4QT编程机制信号与槽机制简介
信号/槽机制是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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 画图板 设计 实现