嵌入式大作业 【画板】
- 格式:doc
- 大小:435.91 KB
- 文档页数:8
济源职业技术学院毕业设计(论文)题目基于嵌入式画图板的设计与实现系别信息工程系专业班级姓名学号指导教师日期二零一二年九月基于嵌入式Qt的画图板设计与实现——画图板总计:毕业设计(论文)39 页图表35 幅摘要随着数字信息技术和网路技术的高速发展,嵌入式系统已经广泛的参透到各行各业以及人们的日常生活中,嵌入式系统技术已经成为目前最热门的技术之一。
嵌入式系统硬件平台的核心是嵌入式微处理器,ARM处理器以其小体积、高性能、低成本、低消耗的优势成为目前应用最广泛的32位高性能嵌入式RISC处理器。
在工业控制、移动通信、多媒体数字消费、手持设备等嵌入式解决方案中据着非常重要的地位。
本文以嵌入式技术的需求为背景,提出了一种适用于嵌入式系统的画图板设计方案,在此基础上设计并实现了基于Linux/Qt的嵌入式Qt画图板,实现了基于Qt的嵌入式画图板系统。
本文的目标是设计和实现嵌入式终端下的画图板。
论文首先介绍了Linux的优点和QT开发环境的搭建,着重分析了QT在软件开发中的编程机制,并具体分析了画图板具体界面的设计,最后简要介绍了嵌入式应用的特点和嵌入式终端下的移植过程。
本文根据画图板的主要功能,设计并实现了画图板的相关基本功能,如:新建、打开、退出、放大、缩小、还原、旋转和拉伸等。
最后运行结果符合设计要求,方案可行。
关键词:嵌入式操作系统;Linux;QT;图形用户界面;画图板ABSTRACTWith the development of digital information technology and network technology rapid development, the embedded system has widely penetrated into all walks of life and people's daily life, the embedded system technology has become the most popular one.Embedded system hardware platform is the core of the embedded microprocessor, ARM processor with its small size, high performance, low cost, low consumption of advantage to become the most widely used high performance 32 bit embedded RISC processor. In industrial control, mobile communication, multimedia digital consumer, handheld devices and embedded solutions according to a very important position.Based on the embedded technology demand as a background, put forward a kind of embedded system applicable to the drawing board design, on the basis of the design and implementation of Linux/Qt based embedded Qt drawing board, based on the realization of the embedded Qt drawing board system.The goal of this paper is to design and Realization of embedded terminal drawing board. The paper first introduces the advantages of Linux and QT development environment to build, focuses on the analysis of QT in the development of software programming, and specific analysis of the drawing board and the specific interface design, and finally introduced the embedded application and the characteristics of embedded terminal under the transplantation process. According to the drawing board to the main function, the design and implementation of drawing board related basic functions, such as: the new, open, exit, amplification, narrow, reduction, rotation and stretching. The final results meet the design requirements, the scheme is feasible.Key words: embedded operating system; Linux; QT; graphical user interface; drawing board目录第1章引言 .................................................................................................................... - 1 -1.1 研究背景 ............................................................................................................ - 1 -1.2 研究目的和意义 ................................................................................................ - 2 -第2章嵌入式操作系统 ................................................................................................ - 3 -2.1 嵌入式系统概述 ................................................................................................ - 3 -2.2 嵌入式操作系统 ................................................................................................ - 4 -2.2.1 嵌入式系统特征 ...................................................................................... - 4 -2.2.2 常见嵌入式Linux系统优缺点............................................................... - 5 -第3章基于嵌入式Qt画图板的硬件平台搭建 .......................................................... - 7 -3.1 ARM微处理器 ................................................................................................... - 7 -3.1.2 ARM微处理器的特点 ............................................................................. - 7 -3.1.3 ARM微处理器系列 ................................................................................. - 7 -3.1.4 ARM9微处理器系列介绍 ....................................................................... - 7 -3.2 S3C2410开发平台介绍 ..................................................................................... - 8 -3.2.1 S3C2410X芯片介绍 ................................................... 错误!未定义书签。
嵌入式图形界面开发_3----Qt 2D绘图廖卫东n1.绘图功能通过重绘事件函数实现,在实际应用中通常重写该函数void paintEvent(QPaintEvent *);n2.绘图类QPainter的头文件包含#include <QPainter>n 3.在下面进行该函数的重定义。
void Dialog::paintEvent(QPaintEvent *){QPainter painter(this);painter.drawLine(0,0,100,100);}n其中创建了QPainter类对象,它是用来进行绘制图形的,我们这里画了一条线Line,其中的参数为线的起点(0,0),和终点(100,100)。
这里的数值指的是像素,详细的坐标设置我们以后再讲,这里知道(0,0)点指的是窗口的左上角即可。
运行效果如下:n5.在qt的帮助里可以查看所有的绘制函数,而且下面还给出了相关的例子。
n将函数改为如下:void Dialog::paintEvent(QPaintEvent *){QPainter painter(this);QPen pen; //画笔pen.setColor(QColor(255,0,0));QBrush brush(QColor(0,255,0,125)); //画刷painter.setPen(pen); //添加画笔painter.setBrush(brush); //添加画刷painter.drawRect(100,100,200,200); //绘制矩形}n这里的pen用来绘制边框,brush用来进行封闭区域的填充,QColor 类用来提供颜色,我们这里使用了rgb方法来生成颜色,即(red,green,blue),它们取值分别是0-255,例如(255,0,0)表示红色,而全0表示黑色,全255表示白色。
后面的(0,255,0,125),其中的125是透明度(alpha)设置,其值也是从0到255,0表示全透明。
嵌入式学习计划手帐模板学习目标:1. 熟练掌握嵌入式系统的基本原理和工作原理2. 掌握嵌入式系统的开发和调试技术3. 熟练掌握常见的嵌入式系统开发工具和平台4. 获得实际项目经验,能够独立完成嵌入式系统的设计开发学习内容:1. 嵌入式系统的基本原理和概念2. 嵌入式系统的开发平台和工具3. 嵌入式系统的编程语言和调试技术4. 嵌入式系统的开发流程和项目管理5. 嵌入式系统的实际项目经验积累学习计划:第一阶段:理论学习(1-2周)- 学习嵌入式系统的基本原理和概念- 理解嵌入式系统的开发平台和工具- 学习嵌入式系统的编程语言和调试技术- 制定学习计划,规划学习内容和时间安排第二阶段:实践操作(3-4周)- 进行嵌入式系统的实际操作和编程练习- 利用开发平台和工具进行嵌入式系统的开发和调试- 学习嵌入式系统的实际项目案例,积累项目经验第三阶段:项目实践(4-6周)- 参与嵌入式系统的实际项目开发- 独立完成一个小型嵌入式系统的设计和开发- 锻炼自己的解决问题能力和团队合作能力第四阶段:总结和反思(1周)- 总结学习收获和项目经验- 分享学习成果和项目成果- 反思学习过程,总结经验教训学习方法:1. 多看书籍和相关资料,扩展知识面2. 多与同行业人员进行交流,学习他们的经验和技巧3. 多进行实际操作和编程练习,磨炼技能和提高实战能力4. 多思考和总结,及时反馈和改进学习曲线:1. 初期可能会遇到理论学习困难,需要借助书籍和资料进行补充和拓展2. 进入实践操作阶段,可能会遇到技术问题和困难,需要多进行思考和实践3. 参与项目实践阶段,可能会遇到组织协调和资源管理问题,需要多与团队成员进行沟通和协作4. 总结和反思阶段,需要对整个学习过程进行深入总结和反思,不断优化和提高自身能力学习成果及评估:1. 完成嵌入式系统的设计和开发2. 完成嵌入式系统相关项目实践3. 获得参与嵌入式系统开发的实际经验4. 深刻理解和掌握嵌入式系统的基本原理和工作原理学习时间安排:- 每天学习时间:3-4小时- 每周学习时间:20-25小时- 每月学习时间:80-100小时学习资源准备:- 嵌入式系统相关书籍和资料- 嵌入式系统开发平台和工具- 嵌入式系统项目案例和实践经验学习心得和收获:- 学习嵌入式系统让我对技术有了更深入的理解,同时也锻炼了我的编程能力和实战经验- 参与嵌入式系统的项目实践,让我感受到了团队合作的重要性,也学到了很多项目管理和资源协调的经验- 总结和反思学习过程,让我意识到了自己的不足和提高的空间,也给我了更多的思考和规划方向总结:学习嵌入式系统是一个循序渐进的过程,需要我们不断学习和积累经验,才能够成为一名合格的嵌入式系统工程师。
嵌入式实习报告嵌入式实习报告(精选5篇)在生活中,报告的用途越来越大,我们在写报告的时候要注意逻辑的合理性。
相信许多人会觉得报告很难写吧,以下是店铺精心整理的嵌入式实习报告(精选5篇),希望对大家有所帮助。
嵌入式实习报告篇1一、实习时间20xx年4月12日-20xx年4月26日二、指导教师姓名陈xx三、实习地点长沙市牛耳服务外包实训基地四、实习目的与内容对于嵌入式项目进行学习培训,掌握嵌入式的主要项目及相关技术五、实习收获与体会一转眼半个月的实习生活过去了,现在我已经回到学校,回想起半个月的实习生活,自己学到了很多,懂得了很多。
真的说不出是什么感觉,伴着时间,就像是在和自己的影子赛跑,不可能从真实的两面去看清它,只是经意不经意的感受着有种东西在过去,也许更适合的只有那句话:时不待我,怎可驻足。
原以为实习对于我来说会是很长,但实际却不同。
想象收获的东西,真的很多,看看我的工作笔记,一篇又一篇,记别人的事情比自己的还多,也许实习,并不像我想象中的那样轻松惬意,而是充满了挑战和艰辛。
我给自己敲响了警钟:“不要半途而废,做事情切忌三分热度。
”我信心十足的回答到:“我一定会坚持到底!”天下英雄皆我辈,一入江湖立马催。
” 从学校到社会的大环境的转变,身边接触的人也完全换了角色,老师变成老板,同学变成同事,相处之道完全不同。
在这巨大的转变中,我们可能彷徨,迷茫,无法马上适应新的环境,但在同学、同事的帮助和自己摸索的情况下,我还是完成了这次实习。
但我发现,以我们的经验,不学到一定的深度和广度是难以在实际工作中应付自如的。
因此反映出学习的还不够,缺点疏漏。
需在加以刻苦钻研及学习,不断开拓视野,增强自己的实践操作技能,我们也许看不惯企业之间残酷的竞争,无法忍受同事之间漠不关心的眼神和言语。
很多时候觉得自己没有受到领导重用,所干的只是一些无关重要的杂活,自己的提议或工作不能得到老板的肯定。
做不出成绩时,会有来自各方面的压力,老板的眼色同事的嘲讽。
图形用户接口一、实验目的(1)了解嵌入式系统图形界面的基本编程方法(2)学习图形库的制作二、实验原理(一)Frame Buffer显示屏的整个显示区域,在系统内会有一段存储空间与之对应。
通过改变该存储空间的内容达到改变显示信息的目的。
该存储空间被称为Frame Buffer,或显存。
显示屏上的每一点都与Frame Buffer里的某一位置对应。
所以,解决显示屏的显示问题,首先要解决的是Frame Buffer的大小以及屏上的每一像素与Frame Buffer的映射关系。
影响空间大小的因素:由于Frame Buffer空间的计算大小是以屏幕的大小和显示模式决定的,所以显示模式(单色或彩色)、显示屏的性能、显示的需要均会影响Frame Buffer空间的大小。
另外显示屏还有单屏幕、双屏幕两种工作模式:单屏幕模式代表屏幕的显示范围是整个屏幕,只需一个Frame Buffer和一个通道;双屏幕模式则将整个屏幕划分为两个部分,这两个部分各自有Frame Buffer,且他们的地址无需连续,并同时具有两个各自独立的通道将Frame Buffer的数据传送到显示屏。
显示操作及映射连续性:由于Frame Buffer通常就是从内存空间分配所得,并且他是有连续的字节空间组成,屏幕的显示操作通常是从左到右逐点像素扫描,从上到下逐行扫描,直到扫描到右下角,然后再折返到左上角。
又由于Frame Buffer里的数据是按地址递增的顺序被提取,所以屏幕上相邻的两像素被映射到Frame Buffer里是连续的,并且屏幕最左上角的像素对应Frame Buffer的第一空间单元,屏幕最右下角则对应最后一个单元空间。
(二)Frame Buffer 与色彩计算机反映自然界的颜色是通过RGB(Red-Green-Blue)值来表示的。
如果要在屏幕某点显示某种颜色,则必须给出相应的RBG值。
Frame Buffer是由所有像素的RGB值或RGB值的部分位所组成,本系统使用的16位/像素的模式下,Frame Buffer里的每个单元16位,每个单元代表一个像素的RGB值,如下图D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 R R R R R G G G G G G B B B B B有了以上的分析,就可以用下面的计算公式FrameBufferSize=Width * Height * Bitperpixel/8计算Frame Buffer的大小(以字节为单位)。
嵌入式系统设计专业:学号:姓名:嵌入式系统大作业题目1、基于ARM的数字相框可以裸机编程,也可建立于uC/osII操作系统平台基础上。
多幅图片换页显示,使用触摸屏进行翻页,手写笔向左滑动实现上一页图片显示,相反,手写笔向右滑动实现下一页图片显示。
扩展功能1,实现图片间切换的动态效果;扩展功能2,实现图片放大缩小的效果。
2、基于ARM的数字式万年历可以显示时、分、秒,倒计时,秒表等功能,显示器可选(数码管或液晶屏);要求使用LPC内部的实时时钟;实现按键调整时间。
扩展功能:用触屏查询。
3、基于ARM+LCD的菜单设计具有3级菜单,每级菜单至少3个菜单项。
扩展功能:每个菜单项设计一个小的演示功能。
4、公交报站显示器用触摸屏点击模拟到站,通过液晶显示提示信息(汉字)。
5、计算器用触摸屏做人机接口,实现软计算器。
6、直流电机控制用7290键盘控制直流电机转速,设置转速阈值,实现超限报警(闪灯)。
7、远程报警指示器通过RS485总线实现远程通信,报警端通过按键触发并蜂鸣,然后通过总线远传到显示端,显示端使用LCD显示报警的主机号,并蜂鸣;显示端实现回传信息撤销报警。
扩展功能:使用CAN总线替换RS485总线实现通信。
8、步进电机控制用LCD显示一个滑块控件,通过触摸屏操作滑块来设置步进电机转动的角度;扩展功能:实现顺、逆时针两个方向的转动;实现多级变速。
9、彩灯显示用触屏控制数码管、单色灯,实现8种以上的动态亮灯方案。
10、交通灯自行设定交通规则,要求在LCD显示器上画出交通灯模型,在数码管上显示交通灯的秒表倒计时数。
11、基于ARM的短信模块的家庭防盗报警系统12、基于ARM的嵌入式温度控制系统的设计13、基于ARM的智能定时闹钟设计14、基于ARM的数字音乐盒设计15、基于ARM的数字温度计设计16、基于ARM的数字定时闹钟设计17、基于ARM的数字电压表设计18、基于ARM的无线表决系统的设计19、基于ARM的频率合成器设计20、基于ARM的数字式人体脉搏仪的设计21、全自动立体停车场模拟系统的制作22、电话远程监控系统的研究与制作23、简易远程心电监护系统24、自行车车速报警系统25、多用定时器的电路设计与制作26、火灾自动报警系统27、电子指南针设计28、病房呼叫系统设计29、家庭智能紧急呼救系统的设计30、遥控窗帘电路的设计。
嵌入式系统开发大作业《嵌入式系统开发》大作业题目:嵌入式系统发展前景班级:姓名:学号:2014年11月24日前言在电子计算机发展的初期,计算机一直是“供养”在特殊机房中的大型、昂贵的专用设备,主要是实现一些特殊的数值计算.随着计算机的发展,微处理器表现出的智能化水平引起了设备制造、机电控制等专业人士的兴趣,他们将微处理器嵌入到一个控制对象的体系中,实现对象体系的智能化控制.这一应用极大地提高了系统的可控性和智能化.为了区别于原有使用在PC领域的计算机,把嵌入到对象体系中、实现对象体系智能化控制的计算机,称作嵌入式计算机.因此,嵌入式计算机诞生于微处理器发展时代.早期嵌入式计算机是将一个计算机嵌入到一个具体应用的控制对象的体系中去,这是嵌入式系统发展的起点,也标志着计算机进入了通用计算机与嵌入式计算机两大分支并行发展的时代,从而导致20世纪末计算机应用的高速发展,并由此引发了计算机分类方式的变化.一、嵌入式简介嵌人式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统,对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。
嵌人式系统与通用计算机系统的本质区别在于系统应用不同,嵌人式系统是将一个计算机系统嵌人到对象系统中。
这个对象可能是庞大的机器,也可能是小巧的手持设备,用户并不关心这个计算机系统的存在。
嵌人式系统一般包含嵌人式微处理器、外围硬件设备、嵌人式操作系统和应用程序四个部分。
嵌人式领域已经有丰富的软硬件资源可以选择,涵盖了通信、网络、工业控制、消费电子、汽车电子等各种行业。
工具.二、嵌入式系统的分类2.1 从硬件范畴按表现形式分类以核心部件来划分:(1)嵌入式微处理器:Am186/88,MIPS,ARM,Power PC,68000,SC-400,386EX 等;(2)嵌入式微控控制器主要有8051,P51XA,MCS-251,MCS-96/196/296,C166/167,683000和ARM系列等;(3)嵌入式DSP处理器:代表性的产品主要是Texas Instruments的TMS320系列和Motorola的DSP56000系列;(4)嵌入式片上系统:分为通用和专用两类,通用系列包括Infineon的TriCore,Motorola的M-Core等.专用的片上系统一般用于某个或者某类系统中,不为一般用户所知.2.2 从软件范畴按实时性要求分类(1)非实时系统:如PDA,手机等;(2)软实时系统:如消费类产品等;(3)硬实时系统:如工业和军工系统产品.三、嵌入式操作系统在嵌人式软件中,操作系统具有极其重要的意义,这一点与PC是相同的,尤其是嵌人式系统一般将所有软件(操作系统和应用软件)整体设计并一次性安装,因此嵌人式操作系统的地位较之于PC其实更加重要和突出。
嵌入式系统大作业指导书A -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII大作业指导书题目:嵌入式系统大作业院(系):物联网工程学院专业: 计算机科学与技术班级:计科0804-0806 指导老师:陈志国设计时间: 10-11 学年 2 学期2011年5月目录1.大作业目的和要求 (4)2.大作业内容 (4)3.大作业时间安排: (7)4.大作业提交: (7)4.1、设计报告要求 (7)4.2、作业提交形式及要求: (7)4.3、时间要求: (8)5.大作业评分标准 (8)1.大作业目的和要求ARM技术是目前嵌入式应用产业中应用十分广泛的先进技术,课程开设的目的在于使学生在了解嵌入式系统基础理论的前提下能够掌握ARM处理器的汇编语言和c语言的程序设计方法,掌握S3C44B0X芯片的基本硬件结构特点和接口设计方法,同时熟悉ARM开发环境,学习ARM的硬件设计和软件编程的基本方法,为今后从事相关的应用与研究打下基础。
通过大作业要达到如下目的:一、掌握ARM的开发工具使用和软件设计方法。
二、掌握ARM处理器S3C44B0X的原理和GPIO接口设计原理。
三、掌握C语言与的ARM汇编语言的混合编程方法;四、培养学生选用参考,查阅手册及文献资料的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
五、通过课程设计,培养学生严肃认真的工作作风。
2.大作业内容选择相应的题目,在老师的指导下,由学生独立完成。
另外,也可以自己设计题目,同时,提出详细的功能描述,经指导老师审查同意后也可做为大作业的题目。
题目一:交通指示灯系统设计功能描述:1.用S3C44B0X的GPIO设计相关电路;2.设计相关的软件并注释;3.实现十字路口2组红、黄、绿交通灯交替显示。
编程提示:1.交通灯可用发光二极管代替;2.电路可部分参照实验电路;3.时间控制可以使用软件循环编程解决。
题目二:数码管显示系统设计功能描述:1.用S3C44B0X的GPIO设计相关电路;2.设计相关的软件并注释;3.实现两位十进制数倒计时显示。
嵌入式课程设计大作业一、教学目标本课程的教学目标是让学生掌握嵌入式系统的基本原理和设计方法,能够独立完成嵌入式系统的设计与实现。
具体来说,知识目标包括:理解嵌入式系统的概念、组成和分类;掌握嵌入式处理器的工作原理和体系结构;熟悉嵌入式操作系统的基本原理和常用操作系统;了解嵌入式系统的设计流程和开发工具。
技能目标包括:能够使用嵌入式处理器进行系统设计和编程;能够使用嵌入式操作系统进行应用开发;能够使用常见的嵌入式开发工具和调试技术。
情感态度价值观目标包括:培养学生的创新意识和团队合作精神,提高学生解决实际问题的能力。
二、教学内容本课程的教学内容主要包括嵌入式系统的基本原理、嵌入式处理器、嵌入式操作系统和嵌入式系统设计流程。
具体来说,教学大纲如下:1.嵌入式系统概述:介绍嵌入式系统的概念、组成和分类,理解嵌入式系统在现代社会中的广泛应用。
2.嵌入式处理器:学习嵌入式处理器的工作原理和体系结构,掌握嵌入式处理器的基本性能指标和选型方法。
3.嵌入式操作系统:了解嵌入式操作系统的原理和特点,学习常用嵌入式操作系统的基本使用方法和编程技巧。
4.嵌入式系统设计流程:掌握嵌入式系统的设计流程,包括需求分析、系统设计、硬件选型、软件设计和系统测试等环节。
5.嵌入式系统开发工具:学习常见的嵌入式开发工具和调试技术,掌握使用这些工具进行嵌入式系统开发的方法。
三、教学方法为了达到本课程的教学目标,我们将采用多种教学方法进行授课,包括讲授法、讨论法、案例分析法和实验法等。
通过这些教学方法的综合运用,激发学生的学习兴趣和主动性,提高学生的实际操作能力。
1.讲授法:通过讲解嵌入式系统的基本原理和设计方法,使学生掌握相关知识。
2.讨论法:学生进行课堂讨论,引导学生思考和分析问题,提高学生的解决问题的能力。
3.案例分析法:通过分析典型的嵌入式系统案例,使学生了解嵌入式系统的实际应用和设计技巧。
4.实验法:安排学生进行实验操作,使学生在实践中掌握嵌入式系统的原理和设计方法。
一、实验目的1,了解并掌握Qt集成开发环境下使用Qt Designer开发图形界面程序的流程和相关操作;2,了解并掌握Qt的信号槽和信号传递机制,并通过具体应用加深理解;3,了解并掌握使Qt应用程序支持中文或国际化的方法,并在本次实验中使用;4,了解并掌握QPainter的translate、shear等库函数的使用方法和Widget类的使用方法,并通过本次实验加深理解;5,掌握在Qt Designer界面上为菜单项添加工具栏按钮、创建相应槽函数的方法;6,了解并掌握使用双缓冲机制绘图的方法。
二、实验环境操作系统:Windows 7应用软件:Qt Creator开发平台:qt-sdk-win-opensource-2009.04三、程序流程图:四、核心源代码mainwindow.cpp的内容(实现菜单项的功能和绘图功能的调用) #include "mainwindow.h"#include "ui_mainwindow.h"#include "donewdialog.h"#include <QMessageBox>#include <QFileDialog>#include <QPainter>#include "aboutdialog.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);setWindowTitle(tr("Qt绘图板"));setFixedSize(700,500); //主窗口大小设为700*500area = new PaintArea;scrollArea = new QScrollArea;scrollArea->setBackgroundRole(QPalette::Dark); //scrollArea对象的背景色设为Dark scrollArea->setWidget(area); //将画布添加到scrollArea中scrollArea->widget()->setMinimumSize(800,600); //scrollArea初始化大小设为800*600ui->dockWidget->hide();setCentralWidget(scrollArea); //将scrollArea加入到主窗口的中心区isSaved = false;curFile = tr("未命名.png");creatColorComboBox(ui->penColorComboBox); //画笔颜色组合框creatColorComboBox(ui->brushColorComboBox); //填充颜色组合框}MainWindow::~MainWindow(){delete ui;}void MainWindow::changeEvent(QEvent *e){QMainWindow::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:ui->retranslateUi(this);break;default:break;}}void MainWindow::doOpen(){if (maybeSave()){QString fileName = QFileDialog::getOpenFileName(this,tr("打开文件"), QDir::currentPath());if (!fileName.isEmpty()){area->openImage(fileName);scrollArea->widget()->resize(area->getImageSize());//获得图片的大小,然后更改scrollArea的大小isSaved = true;curFile = fileName;}}}void MainWindow::doNew()if(maybeSave()){DoNewDialog dlg;if(dlg.exec() == QDialog::Accepted){int width = dlg.getWidth();int height = dlg.getHeight();area->setImageSize(width,height);scrollArea->widget()->resize(width,height);area->setImageColor(dlg.getBackColor());isSaved = false;}}}bool MainWindow::maybeSave(){if(area->isModified()){QMessageBox::StandardButton box;box = QMessageBox::warning(this,tr("保存文件"),tr("图片已经改变,是否保存?"), QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);if(box == QMessageBox::Yes){return doFileSave();}else if(box == QMessageBox::Cancel){return false;}}return true;}bool MainWindow::doFileSave(){if(isSaved){return saveFile(curFile);}else return doFileSaveAs();}bool MainWindow::saveFile(QString fileName){if(area->saveImage(fileName,"png"))isSaved = true;return true;}else return false;}bool MainWindow::doFileSaveAs(){QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile); if(fileName.isEmpty()){return false;}else return saveFile(fileName);}void MainWindow::on_action_N_triggered() //新建菜单{doNew();}void MainWindow::on_action_O_triggered() //打开菜单{doOpen();}void MainWindow::on_action_S_triggered() //保存菜单{doFileSave();}void MainWindow::on_action_A_triggered() //另存为菜单{doFileSaveAs();}void MainWindow::on_action_X_triggered() //退出菜单{if(maybeSave())qApp->quit();}void MainWindow::closeEvent(QCloseEvent *event) //关闭事件{if(maybeSave())qApp->quit();else event->ignore();}void MainWindow::on_action_P_triggered() //打印菜单{area->doPrint();}void MainWindow::on_action_4_triggered() //放大菜单{area->zoomIn();scrollArea->widget()->resize(area->getImageSize());//获得图片的大小,然后更改scrollArea的大小}void MainWindow::on_action_5_triggered() //缩小菜单{area->zoomOut();}void MainWindow::on_action_6_triggered() //还原菜单{area->zoom_1();}void MainWindow::on_action_7_triggered() //旋转菜单{area->doRotate();}void MainWindow::on_action_8_triggered() //拉伸菜单{area->doShear();}void MainWindow::on_action_10_triggered() //清空菜单{area->doClear();}void MainWindow::on_action_11_triggered() //绘图工具栏菜单{ui->dockWidget->show();}void MainWindow::creatColorComboBox(QComboBox *comboBox){QPixmap pix(16,16);QPainter painter(&pix);painter.fillRect(0,0,16,16,Qt::black); //先绘制一个16*16的小图片,然后给其涂色comboBox->addItem(QIcon(pix),tr("黑色"),Qt::black); //再用该图片作为组合框条目的图标painter.fillRect(0,0,16,16,Qt::white);comboBox->addItem(QIcon(pix),tr("白色"),Qt::white);painter.fillRect(0,0,16,16,Qt::red);comboBox->addItem(QIcon(pix),tr("红色"),Qt::red);painter.fillRect(0,0,16,16,Qt::green);comboBox->addItem(QIcon(pix),tr("绿色"),Qt::green);painter.fillRect(0,0,16,16,Qt::blue);comboBox->addItem(QIcon(pix),tr("蓝色"),Qt::blue);painter.fillRect(0,0,16,16,Qt::yellow);comboBox->addItem(QIcon(pix),tr("黄色"),Qt::yellow);comboBox->addItem(tr("无颜色"),Qt::transparent); //即透明}void MainWindow::on_shapeComboBox_currentIndexChanged(QString shape) //选择图形组合框{if(shape == tr("无"))area->setShape(PaintArea::None); //利用PaintArea类中的枚举变量else if(shape == tr("矩形"))area->setShape(PaintArea::Rectangle);else if(shape == tr("直线"))area->setShape(PaintArea::Line);else if(shape == tr("椭圆"))area->setShape(PaintArea::Ellipse);}void MainWindow::on_penStyleComboBox_currentIndexChanged(QString style) //画笔风格组合框{if(style == tr("实线")){area->setPenStyle(Qt::SolidLine);}else if(style == tr("虚线")){area->setPenStyle(Qt::DotLine);}}void MainWindow::on_penWidthSpinBox_valueChanged(int width) //画笔线宽组合框{area->setPenWidth(width);}void MainWindow::on_penColorComboBox_currentIndexChanged(int index) //画笔颜色组合框{QColor color =ui->penColorComboBox->itemData(index,Qt::UserRole).value<QColor>();area->setPenColor(color);}void MainWindow::on_brushColorComboBox_currentIndexChanged(int index) //填充颜色组合框{QColor color =ui->brushColorComboBox->itemData(index,Qt::UserRole).value<QColor>(); area->setBrushColor(color);}void MainWindow::on_action_12_triggered() //关于对话框的实现{AboutDialog abdlg;abdlg.show();if(abdlg.exec()!=QDialog::Accepted)abdlg.show();}void MainWindow::on_action_2_triggered() //选择直线{area->setShape(PaintArea::Line); //利用PaintArea类中的枚举变量}void MainWindow::on_action_3_triggered() //选择无{area->setShape(PaintArea::None);}void MainWindow::on_action_9_triggered() //选择矩形{area->setShape(PaintArea::Rectangle);}void MainWindow::on_action_13_triggered() //选择椭圆{area->setShape(PaintArea::Ellipse);}void MainWindow::on_action_14_triggered() //选择实线{area->setPenStyle(Qt::SolidLine);}void MainWindow::on_action_15_triggered() //选择虚线{area->setPenStyle(Qt::DotLine);}paintarea.cpp的内容(实现双缓冲绘图并提供绘图接口的调用)#include "paintarea.h"#include <QPainter>#include <QPrintDialog>#include <QPrinter>PaintArea::PaintArea(){image = QImage(400,300,QImage::Format_RGB32); //画布的初始化大小设为400*300,使用32位颜色backColor = qRgb(255,255,255); //画布初始化背景色使用白色image.fill(backColor);modified = false;scale = 1;angle = 0;shear = 0;penColor = Qt::black;brushColor = Qt::black;penWidth = 1;penStyle = Qt::SolidLine;curShape = None;isDrawing = false;}void PaintArea::paintEvent(QPaintEvent *){QPainter painter(this);painter.scale(scale,scale);if(isDrawing) //如果正在绘制特殊图形,则显示临时绘图区上的内容{painter.drawImage(0,0,tempImage);}else{if(angle){QImage copyImage = image; //新建临时的copyImage,利用它进行旋转操作QPainter pp(©Image);QPointF center(copyImage.width()/2.0,copyImage.height()/2.0);pp.translate(center);pp.rotate(angle);pp.translate(-center);pp.drawImage(0,0,image);image = copyImage; //只会复制图片上的内容,不会复制坐标系统angle = 0; //完成旋转后将角度值重新设为0}if(shear){QImage copyImage = image;QPainter pp(©Image);pp.shear(shear,shear);pp.drawImage(0,0,image);image = copyImage;shear = 0;}painter.drawImage(0,0,image);}}void PaintArea::mousePressEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton) //当鼠标左键按下{lastPoint = event->pos(); //获得鼠标指针的当前坐标作为起始坐标isDrawing = true;}}void PaintArea::mouseMoveEvent(QMouseEvent *event){if(event->buttons()&Qt::LeftButton) //如果鼠标左键按着的同时移动鼠标{endPoint = event->pos(); //获得鼠标指针的当前坐标作为终止坐标if(curShape == None) //如果不进行特殊图形绘制,则直接在image上绘制{isDrawing = false;paint(image);}else //如果绘制特殊图形,则在临时绘图区tempImage上绘制{tempImage = image; //每次绘制tempImage前用上一次image中的图片对其进行填充paint(tempImage);}}}void PaintArea::mouseReleaseEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton) //如果鼠标左键释放{endPoint = event->pos();isDrawing = false;paint(image);}}void PaintArea::paint(QImage &theImage){QPainter pp(&theImage); //在theImage上绘图QPen pen = QPen();pen.setColor(penColor);pen.setStyle(penStyle);pen.setWidth(penWidth);QBrush brush = QBrush(brushColor);pp.setPen(pen);pp.setBrush(brush);int x,y,w,h;x = lastPoint.x()/scale;y = lastPoint.y()/scale;w = endPoint.x()/scale - x;h = endPoint.y()/scale - y;switch(curShape){case None:{pp.drawLine(lastPoint/scale,endPoint/scale); //由起始坐标和终止坐标绘制直线lastPoint = endPoint; //让终止坐标变为起始坐标break;}case Line:{pp.drawLine(lastPoint/scale,endPoint/scale);break;}case Rectangle:{pp.drawRect(x,y,w,h);break;}case Ellipse:{pp.drawEllipse(x,y,w,h);break;}}update(); //进行更新界面显示,可引起窗口重绘事件,重绘窗口modified = true;}void PaintArea::setImageSize(int width, int height){QImage newImage(width,height,QImage::Format_RGB32);image = newImage;update();}void PaintArea::setImageColor(QColor color){backColor = color.rgb(); //因为image的背景色要用QRgb类型的颜色,所以这里进行了一下转换image.fill(backColor);update();}bool PaintArea::saveImage(const QString &fileName, const char *fileFormat) {QImage visibleImage = image;if (visibleImage.save(fileName, fileFormat)) //实现了文件存储{modified = false;return true;}else{return false;}}bool PaintArea::openImage(const QString &fileName){QImage loadedImage;if (!loadedImage.load(fileName))return false;QSize newSize = loadedImage.size();setImageSize(newSize.width(),newSize.height());image = loadedImage;modified = false;update();return true;}QSize PaintArea::getImageSize(){return image.size()*scale;}void PaintArea::doPrint(){QPrinter printer(QPrinter::HighResolution);QPrintDialog *printDialog = new QPrintDialog(&printer, this);if (printDialog->exec() == QDialog::Accepted){QPainter painter(&printer);QRect rect = painter.viewport();QSize size = image.size();size.scale(rect.size(), Qt::KeepAspectRatio);painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); painter.setWindow(image.rect());painter.drawImage(0, 0, image);}}void PaintArea::zoomIn(){scale*=1.2;update();}void PaintArea::zoomOut(){scale/=1.2;update();}void PaintArea::zoom_1(){scale = 1;update();}void PaintArea::doRotate(){angle +=90;update();}void PaintArea::doShear(){shear = 0.2;update();}void PaintArea::doClear(){image.fill(backColor); //用现在的画布背景色进行填充update();}void PaintArea::setPenStyle(Qt::PenStyle style){penStyle = style;}void PaintArea::setPenWidth(int width){penWidth = width;}void PaintArea::setPenColor(QColor color){penColor = color;}void PaintArea::setBrushColor(QColor color){brushColor = color;}void PaintArea::setShape(ShapeType shape){curShape = shape;}五、实验步骤第一部分:设计界面一.设计菜单1.在QtCreator中新建Qt4 Gui Application工程,我这里使用的工程名为paint,使用默认的QMainWindow作为主窗口。
****级通信工程VC++课程设计报告设计题目:基于MFC的绘画板姓名学号:****学院:工程技术学院专业:通信工程班级:****指导教师:****2014年**月**日题目:基于MFC的绘画板目录第1章VC++和MFC的基本介绍.1.1VC++6.0介绍 (3)1.2 MFC介绍 (4)第2章基本功能2.1创建单文档 (5)2.2添加成员变量 (6)2.3新建工具栏 (6)2.4编辑菜单 (9)2.5建立相应类向导 (10)2.6添加消息函数 (15)第3章简易画图板的制作3.1设计目的 (25)3.2详细设计 (28)3.3点、直线、矩形、椭圆的绘制 (28)3.4改变线色 (28)3.5改变线宽 (29)3.6设置填充色对话框 (29)3.7绘制图形 (29)第4章结果及结论4.1测试结果 (30)4.2参考文献 (31)4.3心得体会 (31)4.4关键源代码 (32)第1章1.1VC++6.0介绍:Visual C++ 6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
Visual C++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。
所以实际中,更多的是以Visual C++6.0为平台。
VC++6.0Visual C++6.0不仅是一个C++ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。
Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。
一:程序界面设计1.1主界面设计图1界面:把项目导入平台,在编辑区域左边显示一个项目清单列表、右上部分显示与项目清单列表下.xml .doc文件相对应的图形化结构(图1)、把测试用例下的测试函数用编程文本显示出来且能够对其进行编辑、把源代码文件下的源程序显示出来并且提供源代码和结构图(见图2)两种显示方式(见下图3)。
右下部分显示控制台信息、运行信息、属性信息和其他相关信息。
默认的显示:左边是项目清单列表,右上是源代码中文档的源代码和结构图,右下是控制台,和运行信息。
功能:在对项目清单上的文件进行操作时要触发对其文件相应的显示界面,这里涉及到事件的分发和接受。
例如项目清单下打开测试用例文件夹下的函数时,在右上显示这个函数,同时允许对其进行编辑,修改;还能够显示这个函数的图形结构。
要保持函数和图形的一致性,当对函数修改后,进行刷新,其图形结构也进行重新生成新的图形。
源代码下的文件也是如此。
这里主要涉及到各种关系的同步问题。
在现有软件中界面出现的问题有:对操作步骤提供撤销和返回,以方便在出现错误或要返回到以前的位置时提供方便。
(图2)1.2项目清单树形结构在左边的项目清单透视图的树形结构中单击右键出现的静态代码分析、源程序插桩、结构流程图、函数关联图、文件关联图、折叠全部、展开全部、更新等操作时,要实现其功能。
同时在右上部分要显示其相应的图形等。
例如在项目清单的树形结构中右击源代码文件夹下的函数时,可以对其函数进行上述静态代码分析、源程序插桩、结构流程图等操作,在界面的右上方应该做出相应的编辑区,或结构流程图等结果显示;当单击静态代码分析时,要能够对该源函数做DD图结构分析,找出函数的支配树、蕴含树、控制流关系。
根据先前的论文(陈恩慧师兄的论文:程序分支覆盖方法的研究)中的理论找出函数中的关键分支,然后进行标记。
当点击源程序插桩时,要把插桩库的插桩函数(参照于全喜师兄的论文:在这里要建插桩函数库,定义插桩规则)插到关键分支点上;当单击结构流程图时要把函数的结构如调用关系等显示出来;当单击函数关联图时要把这个函数和项目中的其他函数的关系显示出来如被其他函数调用或调用其他函数;文件关联图是把各个文件之间的关系表示出来如头文件与源文件的关系。
分析生产生活中某一款具体嵌入式产品,绘制产品功能框图,并说明各部分作用
嵌入式系统是一种应用范围非常广泛的系统。
可以说除了一般用途的
到航天飞机上的实时系统控制都属于嵌入式系统。
根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”。
这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。
通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。
事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,下图是我对嵌入式系统组成的总结(缩略图),嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。
执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。
执行装置可以很简单,如手机上的-一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。
嵌入式系统实战指南学习板与资料示例文章篇一:《嵌入式系统实战指南:学习板与资料》哎呀,同学们,你们知道吗?嵌入式系统就像是一个神秘的魔法世界,充满了奇妙和挑战!而学习嵌入式系统,就像是在这个魔法世界里探险,学习板和资料就是我们的魔法道具!我刚开始接触嵌入式系统的时候,那叫一个懵啊!感觉就像走进了一个完全陌生的森林,不知道该往哪儿走。
可是当我拿到学习板和资料的那一刻,我仿佛看到了一束光,照亮了我前进的道路。
就说这个学习板吧,它可不简单!它就像是我的小伙伴,时刻陪伴着我。
它身上的那些接口、芯片和电路,就像是它的表情和动作,向我诉说着嵌入式系统的秘密。
每次我在它上面进行操作,都感觉像是在和它交流,它会用成功或者失败的结果来回应我。
有一次,我为了让一个小灯按照我的想法闪烁,在学习板上捣鼓了好久。
我心里不停地想:“哎呀,到底是哪里出了问题呀?”我对照着资料,一遍又一遍地检查我的代码,就像在大海里捞针一样。
就在我几乎要放弃的时候,突然发现是一个小小的参数设置错了。
那一刻,我高兴得差点跳起来,对着学习板大喊:“哈哈,我终于找到你啦!”再说说那些资料,它们可真是宝藏啊!厚厚的书本,详细的教程,还有网上的各种视频和论坛。
它们就像是一位位知识渊博的老师,耐心地给我讲解着每一个知识点。
有时候,我看着那些密密麻麻的文字和复杂的图表,会忍不住抱怨:“这也太难懂了吧!”但是只要我静下心来,一点点地去琢磨,就会发现其中的乐趣。
我记得有一次,我在一个论坛上看到有人分享自己的学习经验,就像遇到了知音一样。
我赶紧跟帖请教,人家也很热心地给我解答。
这让我深深感受到,在学习嵌入式系统的道路上,我不是一个人在战斗!学习嵌入式系统,有了学习板和资料还不够,还得有耐心和毅力。
这就好比爬山,学习板和资料是我们的登山杖,但是如果我们自己不坚持往上爬,也到不了山顶看到美丽的风景呀!所以啊,同学们,如果你也对嵌入式系统感兴趣,别犹豫,赶紧拿起学习板,翻开资料,勇敢地去探索这个神奇的世界吧!我相信,只要我们用心去学,就一定能在这个魔法世界里创造出属于自己的精彩!示例文章篇二:《嵌入式系统实战指南:学习板与资料》哎呀,你们知道吗?最近我可算是掉进了嵌入式系统这个神奇的世界里啦!就像是走进了一个充满魔法和秘密的城堡。
内蒙古科技大学信息工程学院计算机系
《嵌入式》实验报告
Figure6给菜单项关联Command消息
c)在View类中对每个菜单项的Command消息进行处理。
设置状态栏
Figure7在状态栏动态显示时间在状态栏中动态显示鼠标移动的坐标
Figure11笔刷属性对话框
如图Figure11所示,自定义笔刷属性对话框,可以设置画笔颜色、宽度、画笔类型。
可以设置画刷颜色、画刷风格。
b)用ClassWixard生产一个对话框类,类名为ColorDlg;
c)在ColoDlg类中对对话框关联的各个控件处理,进行数据交换。
详细处理过程见代码
olor.cpp文件中。
Figure12文本输入对话框资源
Figure14画直线并选择画笔属性
如图Figure14所示为所画的直线,可以任意改变直线的颜色,宽度,直线的类型设定了四种,可以任意改变。
绘制自由连线
Figure15绘制自由连线并选择画笔属性
Figure16绘制矩形、椭圆、圆
Figure16所示,画矩形、椭圆、圆。
可以根据画笔、画刷颜色和风格选择,画刷风格有更改背景色
Figure17背景色更改之前为纯白色
1、每个实验项目填写一份实验报告,电子版命名方式为:学号姓名项目号.doc。
例如:1167111182张三3.doc表示张三做的第3个项目的实验报告。
2、实验报告电子版应该在实验后一周内由学习委员收齐后存放在一个文件夹下,文件夹命名方式为:软件12-1班3,表示软件12-1班第3个项目的实验报告,压缩。
第一时间发送给任课教师。
必须以班级为单位上交。
3、任课教师要求在收到实验报告的一周内进行批阅,并给出成绩及评语。
4、实验报告电子版由任课教师保存。
5、表格宽度可以根据实际情况伸缩。