基于QT实现的画图板程序的设计与实现论文.docx
《基于QT实现的画图板程序的设计与实现论文.docx》由会员分享,可在线阅读,更多相关《基于QT实现的画图板程序的设计与实现论文.docx(14页珍藏版)》请在冰豆网上搜索。
![基于QT实现的画图板程序的设计与实现论文.docx](https://file1.bdocx.com/fileroot1/2022-10/4/82f5cb6a-a438-440c-b88a-00c323bd9648/82f5cb6a-a438-440c-b88a-00c323bd96481.gif)
目 录
1.引言 1
1.1研究背景 1
1.2研究的目的和意义 1
2.QT技术 2
2.1QT主要特性 2
2.2QT编程机制信号与槽机制简介 2
3双缓冲机制 3
3.1双缓冲原理 3
3.2双缓冲技术绘图 3
4电子画板功能设计与实现 3
4.1电子画板功能设计 3
4.2电子画板界面设计 4
4.3电子画板涂鸦功能的实现 6
4.4电子画板基本图形的实现 7
4.5实现编辑菜单功能 9
5.结语 10
参考文献 11
基于QT实现的画图板程序的设计与实现
基于QT实现的画图板程序的设计与实现
学生姓名:
张健 指导教师:
张永奎赵文娟储晶凯
内容提要:
本程序通过调用QT提供的BorderLayout,Button,ButtonGroup等基本类进行了简单的界面设计,运用C++中类的继承特性实现对父类方法的调用,运用信号与槽函数的机制,实现绘制基本图形功能,同时可以在打开的图片上进行二次绘制。
图形界面的各个按钮如“橡皮”、
“铅笔”、“图形”等都能实现其画笔线条的大小,颜色是否填充,编辑各种颜色的实现。
关键词:
嵌入式LinuxQT图形用户界面电子画板双缓冲机制
1.引言
计算机图形技术是随着计算机技术在图形处理领域中的应用而发展起来的一门新技术,是伴随着电子计算机及其外围设备的发展而产生的,现已成为计算机应用科学中的一个重要分支,在许多行业中起着越来越大的作用。
该软件功能与Windows下附件中的画图软件有类似功能。
绘制方面的功能主要包括绘制各种图元,包括直线、矩形、椭圆等,用笔或画刷自由绘图。
绘图时可以选择各种颜色,各种线宽。
软件支持保存和读取jpg格式的图形。
该软件的设计思想是面向对象程序设计的思想。
面向对象技术是一个非常实用而强有力的软件开发方法。
它具有许多特色。
一是方法的唯一性,即方法是对软件开发过程所有阶段进行综合考虑得到的。
二是从生存周期的一个阶段到下一个阶段的高度连续性,即在一个阶段所用到的部分与在下一个阶段所使用的部分是衔接的,所使用的技术经过生存期的每一个阶段后不变。
三是面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)集成到生存期的相应阶段。
1.1研究背景
计算机技术的发展,使人类社会进入了信息化和自动化,计算机智能识别也随着计算机的发展得到了迅速的发展。
特别是图形图像的计算机处理技术更是有了前所未有的进步和应用。
计算机识别也逐渐的从图形图像处理的大环境下分离出来作为一门新的高科技研究领域出现。
画图涉及到的学科很多,包括数字信号处理、工程数学、信息论、运筹学等,它与计算机、自动化、生物学、视觉心理和生理学、人工智能、智能信息处理等众多领域交叉、综合集成,有广泛的应用。
随着操作系统不断的更新换代,其自带的画图板界面及功能也是不断变化着的。
像是xp、vista、win7,它们的画图板的界面布局风格以及功能都有所不同。
这表明,尽管是简简单单的一个操作系统自带画图板,系统设计人员也没有停止对它的不断研究与探索,他们在不断寻找着更人性化、更能满足大众需求的改变。
1.2研究的目的和意义
本选题是设计一个简单的画图软件,能够完成一些简单的画图需求。
在日常生活中,有很多方面都会用到画图来解决阐述一些问题,这就需要借助计算机来进行简单的画图工作,此时就需要一个能简单解决这些问题的画图软件。
11
现在比较经常使用的是windows系统下附带的画图软件,它基本上可以满足一些简单的画图需求。
本设计就是按照这个画图软件的思想设计的,使画图软件能达到满足日常画图需求,功耗小且界面人性化。
2.QT技术
QT是用于本地化跨平台应用开发的领先性“框架”[1]。
QT应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置。
通过使用QT,开发小组们从主要的“开发平台”[2],可为主要操作系统创建本地化的应用程序。
2.1QT主要特性
QT是一个跨平台的C++图形用户界面库,由挪威TrollTech公司开发,目前包括QT/X11、基于Framebuffer的QT、快速开发工具QTDesigner以及国际化工具“QTLinguist”[3]等。
人们所熟知的Linux下面的KDE环境就是基于QT开发而成的。
QT支持“Unix和Linux系统”[4][5]以及Windows系统。
QT的主要特点有:
面向对象,很容易扩展,并且允许真正的组件编程;QT对各个模块进行了良好的封装,使各模块可重用性较好;优良的跨平台特性,使用QT类编写的程序可以实现
“一次编码,到处编译”,极大的降低了跨平台开发的难度;构件支持,对于对象间通信,QT采用了一种全新并且可选的被称为“信号与槽”的对象间通信机制,通过一个对象信号的发射,另一个槽函数的响应,使各个对象之间的通信安全而且高效。
QT的这些特点使它非常适合于真正的构件编程,同时使各个组件之间的协同工作变得十分简单,并且QT是直接基于Xlib的,不依赖Motif工具包,所以它的执行效率比一般的基于平台的代码的执行效率要高。
2.2QT编程机制信号与槽机制简介
信号/槽机制是QT的一个中心特征并且也许是QT与其它工具包的最不相同的部分。
在图形用户界面编程中,经常希望一个窗口部件的一个变化被通知给另一个窗口部件。
更一般地,希望任何一类的对象可以和其它对象进行通讯。
QT的信号与槽机制是QT的信号与槽均以函数形式出现,QT的窗口部件有很多预定义的信号,但也可以通过继承来加入自己的信号。
槽就是一个可以被调用处理特定信号的函数。
QT的窗口部件有很多预定义的槽,但是通常的习惯是你可以加入自己的槽,这样你就可以处理你所感兴趣的信号。
可以用connect()函数对需要的信号和槽进行连接。
当对象的内部状态发生改变,信号就被发射。
从某种意义上讲,它们也许对外面的世界感兴趣。
这就是所有的对象通讯时所做的一切。
它不知道也不注意无论有没有东西接收它所发射的信号。
当一个信号被发射,它所连接的槽会被立即执行,信号/槽机制完全不依赖于任何一种图形用户界面的事件回路。
当所有的槽都返回后发射的信号也将返回。
信号与插槽机制并不要求类之间互相知道细节,这样就可以相对容易的开发出代码可高重用的类。
QT的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。
信号和槽可以使用任何数量、任何类型的参数。
它们是完全类型安全的:
不会再有回调核心转储(coredump)。
可以把许多信号和你所希望的单一槽相连,并且一个信号也可以和所期望的许多槽相连。
把一个信号和另一个信号直接相连也是可以的。
总体来看,信号和槽构成了一个强有力的组件编程机制。
如果一个类要使用信号与槽机制,它就必须是从QObject或QObject的子类继承,而且类的定义必须加上Q_OBJECT宏。
signals、slots和emit是QT特有的关键字,分别用来表示信号、槽、和发送信号,移除这些关键字和预处理程序,就可以使用“标准的C++编译器”[6][7][8]。
槽同其他函数一样也具有访问权限,只是槽的访问权限决定了谁可以和它相连,如一个publicslots:
包含了任何信号都可以相连的槽。
一个protectedslots:
包含了只有这个类和它的子类的信号才能连接的槽。
这就是说这些槽只是类的实现的一部分,而不是它和外界的接口。
一个privateslots:
包含了只有这个类本身的信号可以连接的槽,甚至它的子类都没有获得连接的权利。
3双缓冲机制
3.1双缓冲原理
所谓“双缓冲区”,故名思义就是要有俩缓冲区(简称A和B)。
这俩缓冲区,总是一个用于生产者,另一个用于消费者。
当俩缓冲区都操作完,再进行一次切换(先前被生产者写入的转为消费者读出,先前消费者读取的转为生产者写入)。
由于生产者和消费者不会同时操作同一个缓冲区(不发生冲突),所以就不需要在读写每一个数据单元的时候都进行同步/互斥操作。
顺便提一下,这又一次展现了空间换时间的优化思路。
但是光有俩缓冲区还不够。
为了做到
“不冲突”,还得再搞两个互斥锁(简称La和Lb),分别对应俩缓冲区。
生产者或消费者如果要操作某个缓冲区,必须先拥有对应的互斥锁。
3.2双缓冲技术绘图
当要绘制屏幕时,我们只要调用paint函数即可。
其中我们可以使用绘图方法来绘制任何文字图形图像。
可是当我们绘制的东西多了之后,你就会发现又是屏幕上的显示根本不是我们要的结果,很杂乱。
细想想,会知道因为paint函数中,我们是一边绘制一边显示,所以当内容过多,就会产生没绘制完成,就显示到屏幕上的结果。
因此,双缓冲区就提供了一个完美的解决方案。
我们可以在缓冲区2中绘制图像,而是用缓冲区1来输出到屏幕。
这样我们就可以控制绘制和现实的过程,从而避免上面的现象。
双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性将这个对象上的图形拷贝到屏幕上,这样能大大加快绘图的速度。
双缓冲实现过程如下:
1、在内存中创建与画布一致的缓冲区
2、在缓冲区画图
3、将缓冲区位图拷贝到当前画布上
4、释放内存缓冲区
4电子画板功能设计与实现
设计实现一个成功的应用程序,不但要有使用的功能配置,也要有有好的用户界面,本节就是对于电子画板程序的设计与实现的简要介绍。
4.1电子画板功能设计
在对软件进行实际设计之前,先对使用过程中用户可能用到或可能需要的功能等进行整理和列一个简要的提纲,具体设计丝路如下:
(1)画板新建功能:
新建初始画板。
(2)画板保存、另存为功能:
在对画板进行编辑之后,可以选择保存或者另存为。
(3)画板的打开功能:
可以打开原来编辑并保存过的画板。
(4)画板放大功能:
图片可逐级放大尺寸。
(5)画板缩小功能:
图片可逐级缩小尺寸。
(6)画板还原功能:
画板通过不同尺寸的放大和缩小后,能够还原到初始新建的尺寸大小。
(7)画板清空功能:
画板可以在当前任何状态下进行对当前状态的情空,回到初始新建画板状态。
(8)画板画图工具功能:
画板可以实现选择图形、画笔线宽、画笔颜色等功能。
(9)为用户设计理想的侧边绘图工具栏,并合理安排界面元素布局,使其美观并且方便用户操作。
(10)图片打开、编辑、保存功能:
可以打开一些格式的图片,如png、bmp等,并且可以作为画板背景,在其做编辑并且保存。
4.2电子画板界面设计
4.2.1电子画板整体结构布局
首先要对设计的电子画板布局,使其含有新建、打开、保存等功能键,其次要设计工具栏。
最终,电子画板的整体结构如图1所示:
图1电子画板布局结构效果图
4.2.2电子画板布局的实现
(1)调用QT中的createMenus()函数,实现菜单栏的布局。
(2)调用QT中的createToolBars()函数,实现工具栏的布局。
(3)将画布添加到布局中。
在电子画板布局过程中需要一个添加一个存放菜单栏、工具栏的窗口类。
(1)在工程中添加新的“C++类”[9][10][11],类名为Mywindow,以“QMainWindow”[12]作为基类。
(2)在mywindow.h中声明对象和函数:
classMyWindow:
publicQMainWin