课程设计报告样例5_嵌入式计算器的设计与实现.doc_第1页
课程设计报告样例5_嵌入式计算器的设计与实现.doc_第2页
课程设计报告样例5_嵌入式计算器的设计与实现.doc_第3页
课程设计报告样例5_嵌入式计算器的设计与实现.doc_第4页
课程设计报告样例5_嵌入式计算器的设计与实现.doc_第5页
免费预览已结束,剩余21页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

扬州职业大学课程设计扬 州 市 职 业 大 学课 程 设 计 说 明 书设计题目:基于QT的嵌入式计算器的设计与实现 系 别: 信息工程学院 1专 业: 计算机应用 1姓 名: 王 慧 1学 号: 110702127 1指导教师: 完成时间: 2013年6月 摘 要人类已经进入信息化时代。信息技术发展如新月异,计算器已经进入人们生活的各个领域,在现代生活中不可或缺。大型复杂的计算是人脑不能胜任的,而且比较容易出错。本文针对QT计算器进行研究,设有简单的四则运算:“+”、“-”、“*”、“/”,给用户带来了很多方便,并且提高了用户的运算效率。本文从项目背景、需求分析、软件设计等方面详细说明了QT计算器的开发设计过程。软件采用VM虚拟机,用Linux编写代码,QT设计界面来开发。计算器包含简单计算功能。计算器具有界面可视化,方便用户操作等特点,用户只能使用计算器做简单的四则运算,尽管如此,此计算器还是能够满足人们日常简单的运算,为用户提供了有效保证。关键词:计算器,四则运算,QT设计界面II目 录摘 要I第一章 嵌入式系统基础11.1 嵌入式系统的基本概述11.1.1嵌入式系统的基本概念11.1.2嵌入式系统的体系结构11.1.3嵌入式系统发展趋势21.2 ARM处理器硬件平台31.2.1嵌入式处理器简介31.2.2 ARM处理器简介3第二章 Qt开发工具简介42.1 Qt概述42.2 Qt主要特点42.3 Qt编程机制简介4第三章 项目设计83.1 项目构想83.2 需求分析83.2.1 功能需求83.2.2 功能分析93.2.3 硬件需求 Tiny6410SDK开发板简介93.2.4 软件需求93.2.5 程序流程图10第四章 嵌入式计算器的设计与实现114.1 项目实施114.1.1 创建工程114.1.2 计算器程序的实现114.1.3 计算器程序源代码的分析说明124.1.4 计算器程序的编译运行19第五章 项目总结21致 谢22参考文献23第一章 嵌入式系统基础第一章 嵌入式系统基础1.1 嵌入式系统的基本概述在社会日益信息化的今天,计算机和网络的应用已经全面渗透到日常生活中。应用嵌入式系统的电子产品随处可见,如人们平常使用的手机、摄像机、医疗仪器、汽车。在经济发达国家,每个家庭平均拥有255个嵌入式系统,如每辆汽车平均装有35个嵌入式系统。嵌入式系统的应用广泛进入到工业、军事、宇宙、通信、运输、金融、医疗、气象、农业等众多领域。1.1.1嵌入式系统的基本概念在嵌入式系统行业内有一个被普遍接受的定义:嵌入式系统是以应用为中心,以计算机控制系统为基础,并且软硬件可裁减,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。将一套计算机控制系统嵌入到已具有某种完整的特定功能的(或者将会具备完整功能的)系统内(例如各种机械设备),以实现对原有系统的计算机控制,此时将这个计算机控制系统叫做嵌入式系统。简单地说,嵌入式系统就是被嵌入到电子设备中的专用计算系统。嵌入式系统通常由特定功能模块和计算机控制模块组成,主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用软件等部分组成。它具有“嵌入性”、“专用性”、与“计算机系统”的三个基本要素。嵌入式系统的特点如下。(1) 面向特定应用。(2) 嵌入式系统的硬件和软件都必须进行高效地设计。(3) 嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合的产物。(4) 为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片中或单片机本身,而不是存储于磁盘中。(5) 嵌入式开发的软件代码尤其要求高质量、高可靠性。(6) 嵌入式系统本身不具备二次开发功能,即设计完成后用户通常不能在该平台上直接对程序进行修改,必须有一套开发工具和环境才能进行再次开发。1.1.2嵌入式系统的体系结构嵌入式系统是一类特殊的计算机系统,一般包括硬件设备、嵌入式操作系统和应用软件。它们之间的关系如图1.1所示。嵌入式操作系统应用软件硬件设备嵌入式处理器/外围设备飞图1.1 嵌入式系统的组成硬件设备包括嵌入式处理器和外围设备。其中的嵌入式处理器是嵌入式系统的核心部分,它与通用处理器最大的区别在于,嵌入式处理器大多工作在为特定用户群所专门设计的系统中,它将通用处理器中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。外围设备是指嵌入式系统中用于完成存储、通信、调试、显示等辅助功能的其他部件。目前常用的嵌入式外围设备按功能可以分为存储设备(如RAM、SRAM、Flash等)、通信设备(如RS-232接口、SPI接口、以太网接口、USB接口、无线通信等)和显示设备(如显示屏等)3类。1.1.3嵌入式系统发展趋势1. 提供强大的网络服务针对外部联网要求,嵌入设备必须配有通信接口,相应需要TCP/IP协议簇软件支持;为满足家用电器相互关联及实验现场仪器的协调工作等要求,新一代嵌入式设备还需要具备IEEE1394、USB、CAN、Bluetooth或IrDA通信接口,同时也需要提供相应的通信组网协议软件和物理层驱动软件。为了支持应用软件的特定编辑模式,还需要相应的浏览器。2. 小型化、低成本、低功耗为满足这种特性,要求嵌入式产品设计者相应降低处理器的性能,限制内存容量和复用接口芯片。这就相应提高了对嵌入式软件设计技术要求。3. 人性化的人机界面用户之所以乐于接受嵌入式设备,其重要因素之一是它们与使用者之间的亲和力。它具有自然的人机交互界面。人们与信息终端交互要求以GUI屏幕为主的多媒体界面。4. 完善的开发平台随着Internet技术的成熟、带宽的提高,ICP和ASP在网上提供的信息内容日趋丰富、应用项目多种多样。为了满足应用功能的升级,设计者一方面采用更强大的嵌入式处理器,如32位、64位RISC芯片或数字信号处理器(DSP)增强处理能力;同时还采用实时多任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质量和缩短开发周期。1.2 ARM处理器硬件平台1.2.1嵌入式处理器简介嵌入式系统的核心部件是各种类型的嵌入式处理器,据不完全统计,全世界嵌入式处理器的品种总量已经超过1000种,流行的体系结构有30多个系列,数据总线宽度从8位到32位,处理速度从0.1到2000MIPS(MIPS指每秒执行的百万条指令数)。按功能和内部结构等因素,嵌入式系统硬件平台可以分为嵌入式RISC微处理器、嵌入式CISC微处理器两种。它们之间主要区别如表1.2。表1.2 RISC和CISC之间的主要区别指标RISCCISC指令集一个周期执行一条指令,通过简单指令的组合实现复杂操作;指令长度固定指令长度不固定,执行需要多个周期流水线流水线每周期前进一步指令的执行需要调用微代码的一个微程序寄存器更多通用寄存器用于特定目的的专用寄存器Load/Store结构独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输处理器能够直接处理存储器中的数据1.2.2 ARM处理器简介ARM有3种含义,它是一个公司的名称,是一类微处理器的通称,还是一种技术的名称。ARM公司是微处理器行业的一家知名企业,其设计了大量高性能、廉价、低耗能的RISC芯片,并开发了相关技术和软件。ARM处理器具有高性能、低成本和低功耗的特点,适用于嵌入式控制、消费/教育类多媒体、DSP和移动式应用等领域。ARM处理器的产品分为多个系列,包括ARM7、ARM9、ARM9E、ARM10E、ARM11和SecurCore、Cortex等。每个系列提供一套特定的性能来满足设计者对功耗、性能、体积的需求。SecurCore是独立的一个产品系列,是专门为安全设备而设计的。20第二章 Qt开发工具简介第二章 Qt开发工具简介Qt作为嵌入式Linux环境下图形用户界面的强大编成工具,能给用户提供精美图形界面所需要的所有元素,已经得到越来越广泛的应用。2.1 Qt概述Qt是一个跨平台的C+图形用户界面库,由挪威TrollTech公司开发,目前包括Qt/X11、基于Framebuffer的Qt/Embedded、快速开发工具Qt Designer以及国际化工具Qt Linguist等。人们所熟知的Linux下面的KDE环境就是基于Qt开发而成的。Qt支持Unix和Linux系统以及Windows系统。Qt能以漂亮的用户界面,快速而有效地开发软件。专业版,用于创造成功地商业贸易方面的跨平台软件,技术支持可依赖于Troll Tech公司。Qt自由版已经成为用C+ GUI工具包在Unix上自由软件的开发的主流,并获得广泛的认可,它是Linux上流行的KDE桌面环境的基础。这意味着在Internet上有很多关于Qt编程的有用资源,比如Qt发布程序和一个动态的Qt编程人员的E-mail列表。Qt有广阔的应用前景,开发Qt绝对安全,Troll Tech公司将负责维护Qt,他们将持续地为最新的版本在公布给自由软件联盟方面提供合法保障。2.2 Qt主要特点Qt的主要特点有:面向对象,很容易扩展,并且允许真正的组件编程;Qt对各个模块进行了良好的封装,使各模块可重用性较好;优良的跨平台特性, 使用Qt类编写的程序可以实现 “一次编码,到处编译”,极大的降低了跨平台开发的难度(丁丁等,2004);构件支持,对于对象间通信,Qt没有采用函数回调的方法,而是采用了一种全新并且可选的被称为“信号与槽”的对象间通信机制,通过一个对象信号的发射,另一个槽函数的响应,使各个对象之间的通信安全而且高效。Qt的这些特点使它非常适合于真正的构件编程,同时使各个组件之间的协同工作变得十分简单,并且 Qt是直接基于 Xlib的,不依赖 Motif 工具包,所以它的执行效率比一般的基于平台的代码的执行效率要高。2.3 Qt编程机制简介1. Qt系统的信号与槽机制简介 信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分。在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件。更一般地,我们希望任何一类的对象可以和其它对象进行通讯。较老的工具包使用一种被称作回调的通讯方式来实现同一目的。回调是指一个函数的指针,所以如果你希望一个处理函数通知你一些事件,你可以把另一个函数(回调)的指针传递给处理函数。处理函数在适当的时候调用回调(倪继利,2006)。回调有两个主要缺点。首先他们不是类型安全的。我们从来都不能确定处理函数使用了正确的参数来调用回调。因此容易造成进程崩溃,另外一个问题是,回调这种方式紧紧的绑定了图形用户接口的功能元素,因而很难把开发进行 独立的分类。Qt的信号与槽机制是不同的。Qt的信号与槽均以函数形式出现,Qt的窗口部件有很多预定义的信号,但我们也可以通过继承来加入我们自己的信号。槽就是一个可以被调用处理特定信号的函数。Qt的窗口部件有很多预定义的槽,但是通常的习惯是你可以加入自己的槽,这样你就可以处理你所感兴趣的信号。我们可以用connect()函数对需要的信号和槽进行连接。当对象的内部状态发生改变,信号就被发射。从某种意义上讲,它们也许对外面的世界感兴趣。这就是所有的对象通讯时所做的一切。它不知道也不注意无论有没有东西接收它所发射的信号。当一个信号被发射,它所连接的槽会被立即执行,就像一个普通函数调用一样(见图2.1)。信号/槽机制完全不依赖于任何一种图形用户界面的事件回路。当所有的槽都返回后发射的信号也将返回。信号与插槽机制并不要求类之间互相知道细节,这样就可以相对容易的开发出代码可高重用的类(Matthias Dalheimer,2002)。信号和槽的机制是类型安全的:一个信号的签名必须与它的接收槽的签名相匹配。(实际上一个槽的签名可以比它接收的信号的签名少,因为它可以忽略额外的签名。)因为签名是一致的,编译器就可以帮助我们检测类型不匹配。它以警告的方式报告类型错误,而不会使系统产生崩溃。信号和槽是宽松地联系在一起的:一个发射信号的类不用知道也不用注意哪个槽要接收这个信号(Johan Thelin,2007)。Qt的信号和槽的机制可以保证如果你把一个信号和一个槽连接起来,槽会在正确的时间使用信号的参数而被调用。信号和槽可以使用任何数量、任何类型的参数。它们是完全类型安全的:不会再有回调核心转储(core dump)。你可以把许多信号和你所希望的单一槽相连,并且一个信号也可以和你所期望的许多槽相连。把一个信号和另一个信号直接相连也是可以的。(这时,只要第一个信号被发射时,第二个信号立刻就被发射。)总体来看,信号和槽构成了一个强有力的组件编程机制。如果一个类要使用信号与槽机制,它就必须是从QObject或QObject的子类继承,而且类的定义必须加上Q_OBJECT宏。signals、slots和emit是Qt特有的关键字,分别用来表示信号、槽、和发送信号,移除这些关键字和预处理程序,就可以使用标准的C+编译器。槽同其他函数一样也具有访问权限,只是槽的访问权限决定了谁可以和它相连,如一个public slots:包含了任何信号都可以相连的槽(Andrew Krause,2007) 。一个protected slots:包含了只有这个类和它的子类的信号才能连接的槽。这就是说这些槽只是类的实现的一部分,而不是它和外界的接口。 一个private slots:包含了只有这个类本身的信号可以连接的槽,甚至它的子类都没有获得连接的权利。2. Qt元对象系统Qt中的元对象系统是用来处理对象间通讯的信号/槽机制、运行时的类型信息和动态属性系统。它基于下列三类:QObject类、类声明中的私有段中的Q_OBJECT宏、元对象编译器(moc)。moc读取C+源文件。如果它发现其中包含一个或多个类的声明中含有Q_OBJECT宏,它就会给含有Q_OBJECT宏的类生成另一个含有元对象代码的C+源文件。这个生成的源文件可以被类的源文件包含(#include)到或者和这个类的实现一起编译和连接。 除了提供对象间通讯的信号和槽机制之外(介绍这个系统的主要原因),QObject中的元对象代码实现其它特征: className()函数在运行的时候以字符串返回类的名称,不需要C+编译器中的本地运行类型信息(RTTI)的支持。 inherits()函数返回这个对象是否是一个继承于QObject继承树中一个特定类的类的实例。 tr()和trUtf8() 两个函数是用于国际化中的字符串翻译。 setProperty()函数和property()函数,这两个函数是用来通过名称动态设置和获得对象属性的。 metaObject()函数返回这个类所关联的元对象。 虽然使用QObject作为一个基类而不使用Q_OBJECT宏和元对象代码是可以的,但是如果Q_OBJECT宏没有被使用,那么这里的信号和槽以及其它特征描述都不会被提供。根据元对象系统的观点,一个没有元代码的QObject的子类和它含有元对象代码的最近的祖先相同。举例来说就是,className()将不会返回你的类的实际名称,返回的是它的这个祖先的名称。故强烈建议QObject 的所有子类使用Q_OBJECT宏,而不管它们是否实际使用了信号、槽和属性(Jonathan Corbet, 2005)。 第三章 项目设计第三章 项目设计3.1 项目构想根据嵌入式Linux应用开发课程设计说明以及网上的一些介绍,我决定此次课程设计将制作一个简易的四则计算器。当今社会,计算器已经成了人们工作生活中必不可少的一种计算工具,有了计算器,人们在需要算数的时候就会很快的得出答案,并且能保证结果的准确性。以前,人们有算盘之类的算数工具,但相比计算器而言就没那么直观、方便,还不易学习。计算器的发明无疑成了人们最好的帮手。因此,通过这样的启发,我决定自己亲手尝试做一个简易计算器,从而能够让自己了解计算器内部的程序结构。3.2 需求分析3.2.1 功能需求在程序设计中,通过设计、编制、调试一个模拟计算器的程序,加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:一是传统的结构化程序设计方法,二是更先进的面向对象程序设计方法。而在面向对象程序设计中关键是如何将问题域中的实体(即日常所见的概念)抽取出来,作为C+程序中的类,而属性与行为作为类的两类要素通常是必不可少的,甚至还应考虑类必须满足的约束。 我们日常生活的开支大额数字或是多倍小数的计算都需要计算器的帮助处理数字的开方、正余弦都离不开计算器。虽然现在的计算器价格比较低廉,但是功能过于简单的不能满足个人需求,功能多的价格较贵,操作不便不说,很多功能根本用不到。所以,我们想到可不可以用自己的所学为自己设计开发一个属于自己的简单计算器来完成日常生活的需求。 计算器是日常生活中十分便捷有效的工具,能实现加、减、乘、除、开方、求倒数等简单运算的工具。要实现计算功能,可以用C+和Qt的知识编写程序来解决此问题。该计算器大大的降低了数字计算的难度及提高了计算的准确度和精确度。该计算器使用非常简单和方便,对广大中小学生的学习有巨大帮助作用,也对在职人员的工作有点帮助作用。本文的程序设计设计工作环境为Fedora-VMware workstation、QtCreator,在程序设计中,采用了结构化与面向对象两种解决问题的方法。3.2.2 功能分析该计算器采用简单的四则运算模块。这一模块要求进行加减乘除运算。支持十进制的直接输入、计算,并设有清除键、等号键。当输入等号键时直接给出当前算式的运算结果。3.2.3 硬件需求 Tiny6410SDK开发板简介Tiny2440SDK底板布局及接口资源如图3.1所示,它是一个双层电路板,为了方便用户学习开发参考使用,上面引出了常见的各种接口,并且按照功能模块集中在电路板一侧,以方便开发使用。 图3.1 Tiny2440SDK底板布局3.2.4 软件需求 要实现项目需求目标,完成项目任务,需要解决软件方案的确定问题,以下详细列出了8个需要安装的软件。1.配置超级终端2.安装与配置DNW3.安装与配置虚拟机4.安装Linux操作系统5.实现Windows共享6.配置NFS服务7.配置FTP服务8.安装与配置交叉编译工具链3.2.5 程序流程图本项目为嵌入式计算器,具体流程图如下图3.2开始显示计算机界面输入数值判断选项加减乘除clear结束选择功能键图 3.2 流程图 第四章 入式计算器的设计与实现第四章 嵌入式计算器的设计与实现 本章内容主要为大家详细讲述一下嵌入式计算器的设计过程以及需要用到的一些程序代码。4.1 项目实施4.1.1 创建工程1.打开QtCreator,选择 File-New File or Project,然后在弹出的对话框中选择“其他控件”-“空的Qt项目”,然后进入下一步。2.定义新工程的工程名并选择保存路径,然后进入下一步。3.选择创建于“桌面”,点击完成,即可完成新工程的创建。(如图4.1所示)图4.1系统工程图4.1.2 计算器程序的实现计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。1.计算器图形界面的实现通过分析计算器的功能我们可知,需要16个按键和一个显示框,同时考虑到整体的排布,还需要水平布局器和垂直布局器。通过组织这些类我们可以实现一个简单的带有数字09,可以进行简单四则运算且具有清屏功能的计算器。对于这些类的具体操作会在后面的代码中详细说明。2.信号和对应槽函数的绑定3.分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,4.主要进行数字的录入,这类按键包括按键09;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=”;三是清屏操作键,用于显示框显示信息的清除。5.进入刚才创建的空工程,双击左侧的C,在主编辑框中目前显示C的内容为空,如上图4.1所示。这是因为目前什么文件都没有添加的缘故。6.添加文件calculator.h7.在工程Calculator上面点击右键,然后点击Add New,选择添加C+ Header File,进入下一步后输入文件名calculator.h,然后完成文件的添加。8.添加文件calculator.cpp和main.cpp9.与添加文件calculator.h的过程类似,只是在选择文件类型时选择为C+ Source File。完成后可以查看C文件的内容,整个工程的文件结构如图4.2所示。 图4.2系统工程图4.1.3 计算器程序源代码的分析说明1.对calculator.h源代码的简要说明calculator.h源文件如下:#define CALCULATOR_H#define CALCULATOR_H #include #include #include#include#includeclass Calculator : publicQWidgetQ_OBJECT public: Calculator(); Calculator(); public slots: voidzeroButtonPress();voidoneButtonPress();voidtwoButtonPress();voidthreeButtonPress();voidfourButtonPress();voidfiveButtonPress();voidsixButtonPress();voidsevenButtonPress();voideightButtonPress();voidnineButtonPress();voidaddButtonPress();voidsubButtonPress();voidmulButtonPress();voiddivButtonPress();voidclearButtonPress();voidequButtonPress();private:QLineEdit *operateEdit; /声明显示框QPushButton *zeroButton; /声明数字按键QPushButton *oneButton;QPushButton *twoButton;QPushButton *threeButton;QPushButton *fourButton;QPushButton *fiveButton;QPushButton *sixButton;QPushButton *sevenButton;QPushButton *eightButton;QPushButton *nineButton;QPushButton *clearButton; /声明运算符按键QPushButton *addButton;QPushButton *subButton;QPushButton *divButton;QPushButton *mulButton;QPushButton *equButton;QHBoxLayout *firstLayout; QHBoxLayout *secondLayout;QHBoxLayout *thirdLayout;QHBoxLayout *fourthLayout;QVBoxLayout *mainLayout;/声明垂直布局器QString input1; /计算器第一个运算操作数QString input2; /计算器第二个运算操作数char operate; /运算符;#endif2.对calculator.cpp源代码的简要说明首先是构造函数的实现:Calculator:Calculator()operateEdit = new QLineEdit(this); /初始化显示框operateEdit-setReadOnly(true); /设置显示框为只读operateEdit-setText(tr(0); zeroButton = new QPushButton; /初始化按键zeroButton-setText(tr(0); /设置按键上显示的标签oneButton = new QPushButton;oneButton-setText(tr(1);twoButton = new QPushButton;twoButton-setText(tr(2);threeButton = new QPushButton;threeButton-setText(tr(3);fourButton = new QPushButton;fourButton-setText(tr(4);fiveButton = new QPushButton;fiveButton-setText(tr(5);sixButton = new QPushButton;sixButton-setText(tr(6);sevenButton = new QPushButton;sevenButton-setText(tr(7);eightButton = new QPushButton;eightButton-setText(tr(8);nineButton = new QPushButton;nineButton-setText(tr(9);clearButton = new QPushButton;clearButton-setText(tr(Clear);addButton = new QPushButton;addButton-setText(tr(+);subButton = new QPushButton;subButton-setText(tr(-);mulButton = new QPushButton;mulButton-setText(tr(*);divButton = new QPushButton;divButton-setText(tr(/);equButton = new QPushButton;equButton-setText(tr(=);firstLayout = new QHBoxLayout; firstLayout-addWidget(zeroButton); firstLayout-addWidget(oneButton); firstLayout-addWidget(twoButton); secondLayout = new QHBoxLayout;secondLayout-addWidget(threeButton);secondLayout-addWidget(fourButton);secondLayout-addWidget(fiveButton);secondLayout-addWidget(subButton);thirdLayout = new QHBoxLayout;thirdLayout-addWidget(sixButton);thirdLayout-addWidget(sevenButton);thirdLayout-addWidget(eightButton);thirdLayout-addWidget(mulButton);fourthLayout = new QHBoxLayout;fourthLayout-addWidget(nineButton);fourthLayout-addWidget(clearButton);fourthLayout-addWidget(equButton);fourthLayout-addWidget(divButton);mainLayout = new QVBoxLayout(this); mainLayout-addWidget(operateEdit); mainLayout-addLayout(firstLayout); mainLayout-addLayout(secondLayout); mainLayout-addLayout(thirdLayout); connect(zeroButton,SIGNAL(clicked(),this,SLOT(zeroButtonPress();connect(oneButton,SIGNAL(clicked(),this,SLOT(oneButtonPress();connect(twoButton,SIGNAL(clicked(),this,SLOT(twoButtonPress();connect(threeButton,SIGNAL(clicked(),this,SLOT(threeButtonPress();connect(fourButton,SIGNAL(clicked(),this,SLOT(fourButtonPress();connect(fiveButton,SIGNAL(clicked(),this,SLOT(fiveButtonPress();connect(sixButton,SIGNAL(clicked(),this,SLOT(sixButtonPress();connect(sevenButton,SIGNAL(clicked(),this,SLOT(sevenButtonPress();connect(eightButton,SIGNAL(clicked(),this,SLOT(eightButtonPress();connect(nineButton,SIGNAL(clicked(),this,SLOT(nineButtonPress();connect(addButton,SIGNAL(clicked(),this,SLOT(addButtonPress();connect(subButton,SIGNAL(clicked(),this,SLOT(subButtonPress();connect(mulButton,SIGNAL(clicked(),this,SLOT(mulButtonPress();connect(divButton,SIGNAL(clicked(),this,SLOT(divButtonPress();connect(equButton,SIGNAL(clicked(),this,SLOT(equButtonPress();connect(clearButton,SIGNAL(clicked(),this,SLOT(clearButtonPress();this-setWindowTitle(tr(Calculator); input2= 0;input1 = 0; operate = 0;3. 根据前面对按键事件的分析,有数字输入键,运算操作符输入键和清屏键三种,故对每种事件的槽响应函数都只说明一种,其他依此类推。数字输入键响应槽函数,以按键“1”为例:void Calculator:oneButtonPress()if(input2=0) /如果当前显示框为0 input2=1; /变0为1 else/如果当前显示框不为0 input2= operateEdit-text(); input2.append(tr(1); /在显示的数据后面追加1 operateEdit-setText(input2); /更新显示框中的显示信息运算操作符输入键响应槽函数,以按键“+”为例:void Calculator:addButtonPress()floatfirst,second; input2= operateEdit-text();If(operate = 0) input1 = input2; input2= 0; /清除运算操作数2中的数据

温馨提示

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

评论

0/150

提交评论