嵌入式qt实验报告简单计算器的设计)

合集下载

嵌入式_实验五_简单计算器的设计

嵌入式_实验五_简单计算器的设计

嵌入式操作系统原理与应用实验报告实验题目:实验五、简单计算器设计院系:计算机科学与技术学院专业年级:学生姓名:学号2014 年10 月7日一、实验目标和重点使用MFC编写一个如下图所示的计算器程序可以直接从键盘输入两个数,然后按下运算按钮可以计算,可以计算三角函数二、实验内容思路:设计三个edit控件,作为被运算数和结果显示,添加加减乘除按钮,按下后进行运算;添加Check 按钮检测状态,因为三角函数都是单目运算符,故只有一个数,选择其中一个edit控件显示。

三、实验步骤及结果1)首先打开Microsoft Visual Studio,选择新建项目,基于对话框2)创建一个对话框程序,在Dialog中完成以下设计图,添加“+”、“‐”,“*”,“/”按钮button 控件并在属性里修改各个控件的caption属性、控件ID。

例如:“+”修改为ID_ADD,完成修改后,如图:3)对三个edit控件进行添加变量m_num1、m_num2、m_result,前面两个为操作数,后面一个为运算结果。

5)点击“闪电”,选择添加事件如下图6)在操作符按下的click事件下添加代码:操作符“+”添加代码:void CsimplecaculatorDlg::OnBnClickedAdd() {UpdateData();m_result=m_num1+m_num2;UpdateData(FALSE);}操作符“-”添加代码:void CsimplecaculatorDlg::OnBnClickedMinus() {UpdateData();m_result=m_num1*m_num2;UpdateData(FALSE);}操作符“-”添加代码:void CsimplecaculatorDlg::OnBnClickedPlus(){UpdateData();m_result=m_num1-m_num2;UpdateData(FALSE);}操作符“/”添加代码:void CsimplecaculatorDlg::OnBnClickedDiv(){UpdateData();if(m_num2)m_result=m_num1/m_num2;elseAfxMessageBox(_T("被除数不能为!"),0,0);UpdateData(FALSE);}7)以下为三角函数的添加代码:同时要在文件的开始添加pi的值,#define pi 3.1415926操作符“sin”按下的click事件下添加以下代码UpdateData();temp=m_num1;if(m_num1<180)m_result=sin(m_num1*pi/180.0); //Pi为圆周率,定义预处理命令else{while (temp>=180){temp-=180;}m_result=sin(temp*pi/180.0);UpdateData(FALSE);其他运算符(cos tan cot )同理添加如图:8)以下为选择简单计算器和三角函数的按钮的控件添加代码:9)在操作符“清除”按下的click事件下添加以下代码:10)完成以上操作后,为了实现三角函数的函数曲线,添加以下代码:CDC *pDC=GetDC();//CClientDC * pClientDC=myWindow.GetClientRect(&rc);//得到绘图环境CPen pen,*poldpen; //创建画笔,和用来保存旧画笔pen.CreatePen(PS_SOLID,2,RGB(m_red,0,0)); //创建一个新画笔的,特性,实线,线宽个像素poldpen=pDC->SelectObject(&pen); //选择新画笔,保存旧画笔//colorBrush.CreateSolidBrush(clRGB);//CDC*pDC=GetDC();pDC->MoveTo(110,180);pDC->LineTo(260,180);pDC->MoveTo(120,110);pDC->LineTo(120,250);pDC->MoveTo(120,200);double i,x,y;for (i=0;i<=200;i++){x=120+i;y=180-20*sin(i/20);pDC->LineTo(x,y);}pDC->SelectObject(&poldpen);// 恢复原画笔状态ReleaseDC(pDC); //释放画笔CBrush colorBrush; 11)实验结果截图:四、心得体会通过此次实验,完成了简单计算器的设计。

嵌入式课程设计报告 模拟计算器和乒乓球游戏机

嵌入式课程设计报告  模拟计算器和乒乓球游戏机

摘要近年来,随着科技的进步,计算机在人们的生活中的地位逐渐变得不可替代,同时,嵌入式领域的不断深入带动控制检测技术的日益更新,嵌入式系统具有低功耗、体积小、功能强、集成度高等优点。

在试验检测和自动控制方面,嵌入式的部件往往作为一个核心的控制系统再加以软件控制,使得生活中的自动控制领域发生技术性的飞跃。

本次设计包括两个内容:简易计算器和乒乓球游戏机,都是利用周立功S3C2410实验箱上的硬件实现的,在模拟计算器系统的设计中,利用键盘输入数据,LED数码管显示结果,能够进行加减乘除的运算。

在乒乓球游戏机的系统设计中,利用键盘作为球拍,用四个LED灯模拟球运动,数码管显示分数来模拟乒乓球的击球过程和分数的统计,LCD提示本局结束。

关键字:嵌入式 S3C2410 计算器乒乓球游戏机目录1 系统需求分析 (1)1.1 简易计算器的设计 (1)1.2 乒乓球游戏机的设计 (1)2 概要设计 (2)2.1 简易计算器的功能模块 (2)2.2 乒乓球游戏机的功能模块 (3)3 详细设计 (4)3.1 简易计算器的程序流程图 (4)3.2 乒乓球游戏机的程序流程图 (5)3.3 简易计算器的功能实现 (6)3.3.1 显示输入数据的函数 (6)3.3.2 显示计算结果的函数 (6)3.4乒乓球游戏机的功能实现函数 (8)3.4.1 定时器的设置和中断服务函数 (8)3.4.2 发球函数的实现 (8)3.4.3 判断失误次数的函数实现 (9)3.4.4 击球函数的实现 (10)4 测试结果 (13)4.1 简易计算器的测试 (13)4.2 乒乓球游戏的测试 (14)6 致谢 (16)7 参考文献 (17)1 系统需求分析1.1 简易计算器的设计设计一个能够实现简单的加减乘除运算的简易计算器,主要是键盘的输入和数据的显示,利用实验箱上的键盘进行数据和运算符号的输入,LED数码管实现数据和结果的显示,通过本设计的分析,主要实现一下功能:1.实验箱上数字键盘的数据输入,运算符的输入2. LED动态显示输入的数据和计算的结果。

嵌入式实验报告-简易计算器

嵌入式实验报告-简易计算器

一目的及要求1实验目的根据计算器的原理设计一个具有加减乘除功能的简易计算器。

2实验要求(1)数字和结果用数码管显示。

(2)数字、+-*/、=、C用4X4键盘实现。

(3)计算结果正确,有出错提示。

二实验原理框图基本工作原理:本设计利用数码管和4*4矩阵式键盘实现了简易计算器的功能。

接通电源,数码管显示全0。

计算时,通过键盘输入需要计算的数字,该数字显示在数码管上,当键入等号时,计算结果显示在数码管上。

进行第二次运算时,按C键清除键盘结果。

当计算出现错误时,LED灯亮报警。

当计算结果超出数码管显示出现溢出时,报警电路也会报警。

报警输出为--。

四系统软件设计1.数据输入模块原理:通过4*4矩阵模块输入数字,在数码管上显示出来。

2.运算模块原理:四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号时,将所得结果反馈给运算模块输入端。

3.输出模块原理:通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据。

当输出结果溢出是LED亮四次,同时数码管显示都为--。

五实验调试首先按清零键清零。

然后进行调试。

输入数据2,再按乘法键,输入第二个数字6,按等号键,数码管显示12;再按除法键,输入第二个数据3,按等号键,数码管显示4;再按加法键,输入第三个数据7,依次按等号键,数码管显示11;按减法键,输入第四个数据99,依次按等号键,数码管显示-88。

若输入超出显示管的最大值或者超出数码管的位数,结果溢出,LED亮报警,同时数码管显示都为--。

如输入999999加上2 ,结果就溢出,LED灯亮四次报警。

六程序#include "LPC2468.h" /* LPC24xx definitions */ #include "type.h"#include "irq.h"#include "target.h"#include "timer.h"#include "fio.h"#include "keyboard.h"#include "SPI.h"extern BYTE seg_buf[50]; // LPC2468开发板使用此数组的0~5显示六个数码管;LPC2478板使用1~6BYTE seg_copy1[7];BYTE seg_copy2[7];unsigned long Num1 =0;/*第一个输入的数字*/unsigned long Num2 =0;/*第二个输入的数字*/unsigned long Num3 =0;/*第二个输入的数字*/extern BYTE KEY; // LPC2468开发板使用此数组的0~5显示六个数码管;LPC2478板使用1~6enum {Add =1,Dec,Mut,Div,nofuntion}funtion;/******************************************************************** *********** Main Function main()********************************************************************* *********/int main (void){unsigned char counter = 0; /*计算输入的数字的个数,超过6个则报警,运算结果超过6位数也报警*/unsigned char cal_allow = 1; /*允许输入数字标志*/unsigned char input_allow = 1;/*允许输入数字标志*/unsigned char funtion_type = 0;/*运算功能*/unsigned char Ne_num = 0;/*负数标志*/DWORD value=0,i=0;TargetResetInit();enable_timer(1);SPI_Init(8); // SPI总线速率为28.8/8 = 3.6 MHz Seg_Init(); // 数码管初始化LedsInit();for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=0;}counter = 0;cal_allow = 1;input_allow = 1;funtion_type = nofuntion;while ( 1 ){value = KEY;/*输入数字*/if(value>0 && value<11){if(counter < 6&&input_allow==1){if(counter == 0) seg_buf[1] = value-1;else{for(i=0;i<counter;i++){seg_buf[counter+1-i] = seg_buf[counter-i]; }seg_buf[1] = value-1;}counter++;}if(counter == 6){input_allow = 0;LedOn(1);LedOn(2);LedOn(3);LedOn(4);}}/*如果是“C”键,则清除显示,清除计算标志*/if(value == 11){for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=0;}counter = 0;Num1 = 0;Num2 = 0;Num3 = 0;cal_allow = 1;input_allow = 1;Ne_num = 0;/*负数标志*/funtion_type = nofuntion;}/*如果是“+”键,则显示结果*/if(value == 13 ){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Add;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/}/*如果是“-”键,则显示结果*/if(value == 14&& cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Dec;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“X”键,则显示结果*/if(value == 15 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++)seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Mut;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“/”键,则显示结果*/if(value == 16 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Div;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“=”键,则清除显示,清除计算标志*/if(value == 12){for(i=0;i<7;i++){seg_copy2[i] = seg_buf[i];/*拷贝第二次输入的数字*/}/*把输入的数字串1合成运算数字*/Num1 = seg_copy1[6]*100000+seg_copy1[5]*10000+seg_copy1[4]*1000 +seg_copy1[3]*100+seg_copy1[2]*10 +seg_copy1[1];/*把输入的数字串2合成运算数字*/Num2 = seg_copy2[6]*100000+seg_copy2[5]*10000+seg_copy2[4]*1000 +seg_copy2[3]*100+seg_copy2[2]*10 +seg_copy2[1];switch(funtion_type){case Add:{Num1 = Num1+Num2;/*计算结果存在Num1中*/break;}case Dec:{if(Num1==Num2) Num1 = 0;else if(Num1>Num2){Num3 = Num1-Num2;/*计算结果存在Num1中*/ Num1 = Num3;}else if(Num2 > Num1){Num3 = Num2-Num1;Ne_num =1;Num1 = Num3;}break;}case Mut:{Num3 = Num1*Num2;/*计算结果存在Num1中*/ Num1 = Num3;break;}case Div:{if(Num1>=Num2&&Num2!=0){Num3 = Num1/Num2;/*计算结果存在Num1中*/}Num1 = Num3;break;}default:break;}/*显示结果*/if(Num1>999999||(Ne_num ==1&&Num1>99999)||Num2 ==0) {for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=10;/*显示横杠表示计算溢出错误!*/}for(i=0;i<5;i++){LedOn(1);LedOn(2);LedOn(3);LedOn(4);delayMs(1,200);LedOff(1);LedOff(2);LedOff(3);LedOff(4);delayMs(1,200);}}else{seg_buf[1] = Num1%10;seg_buf[2] = (Num1%100)/10;seg_buf[3] = (Num1%1000)/100;seg_buf[4] = (Num1%10000)/1000;seg_buf[5] = (Num1%100000)/10000;seg_buf[6] = Num1/100000;if(Ne_num ==1){seg_buf[6] = 10;/*显示负号*/}}}delayMs(1,200);}}/******************************************************************** *********** End Of File********************************************************************* ********/七实验现象(1)运行成功以后的计算机界面如图一:图一(2)正确输入6+6=12的现象如图二和图三:图二图三(3)当进行除操作且除数为0时的现象如图四:图四七实验小结在设计计算机的过程中,我们遇到了很多问题,但是都通过查资料和请教同学得到了解决。

基于Qt的计算器设计

基于Qt的计算器设计

衡阳师范学院嵌入式系统课程设计题目:基于Qt的计算器设计作者姓名:陈明慧、龚秋弘、宋素梅、关妹学号:所在院系:计算机学院专业:计算机科学与技术(师范)指导老师:***2018年7月目录摘要 (3)一、总体设计方案 (4)二、功能模块 (5)1. 基本计算功能: (5)2. 辅助功能 (5)3. 数字存储 (5)三.详细设计: (6)1. 基本计算功能: (6)2. 辅助功能 (9)三、功能验证及运行结果 (12)3.1基本加减乘除: (12)3.2复杂操作 (14)四、总结: (15)五、参考资料: (15)基于Qt的计算器设计摘要当今社会是信息社会,科技经济高速发展的社会,为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。

然而,电脑已经成为当代人生活的必需品,运行在电脑上的计算器成为了人们的生活学习绝佳伴侣。

本设计是用C++编写的,基于Qt图形用户界面应用程序框架的计算器,并实现了一定的计算功能。

关键字:Qt C++ 计算器一、总体设计方案1.目标:基于Qt用C++编写计算器程序,仿照window7计算器,实现两数加减乘除,平方,倒数,开方运算。

2.运行环境:编写环境:Qt 5.3.0 windows64位Exe 运行:windows 103.功能描述:a.基于Qt设计计算器的ui界面。

b.编写的应用程序实现如下功能:(1)加减乘除,平方,倒数,开方(2)存储和显示之前的运行结果(3)实现清屏,退格,退出应用程序的功能c. 应用程序为exe工程建立:文件->新建文件和工程->QtwidgetsApplication包含mainwindow.uid. ui界面设计: 在QT设计器中布置好计算器界面,所有按键采用pushButton控件,显示计算结果采用的是BrowerEdit控件。

完成的界面如下图所示:二、功能模块1. 基本计算功能:1.导数运算:btnReciprocal()2.开平方运算:btnSqrtSlot()3.取反运算:btnNegateSlot()4.基本加减乘除及百分号运算:btnEquSlot()2. 辅助功能1.显示框初始化setExp()2.复位btnClearSlot()3.删除当前框里的运算数:btnClearErrorSlot()4. 退格btnBackSLot()3. 数字存储1.内存清零btnMemoryClearSlot()2.读内存btnMemoryReadSlot()3.保存内存btnMemorySaveSlot()4.累加和累减btnMemoryAddSlot()和btnMemorySubSlot()三.详细设计:1. 基本计算功能:1.导数运算:btnReciprocal()1void MainWindow::btnReciprocal()2{3if(!cur.isEmpty())4stk.push(cur);5exp="1/"+stk.top();6bool ok;7qreal t2=stk.top().toDouble(&ok);8qint64t1=stk.top().toLongLong(&ok);9stk.pop();10QString res;11if(ok)res=QString::number(double(1/(1.0*t1))); 12else res=QString::number(double(1/t2));13stk.push(res);14cur="";15showNumber(exp,res);16}2.开平方运算:btnSqrtSlot()3.取反运算:btnNegateSlot()4.基本加减乘除及百分号运算:btnEquSlot()2. 辅助功能1.显示框初始化setExp()2.复位btnClearSlot()3.删除当前框里的运算数:btnClearErrorSlot()4. 退格btnBackSLot()3. 数字存储1.内存清零btnMemoryClearSlot()2.读内存btnMemoryReadSlot()3.保存内存btnMemorySaveSlot()4.累加和累减btnMemoryAddSlot()和btnMemorySubSlot() //累加三、功能验证及运行结果3.1基本加减乘除:3.1.1加法3.1.2减法3.1.3乘法3.1.4除法除数为零时:除数非零时:3.1.5 %操作3.2复杂操作3.2.1倒数运算3.2.2开平方操作四、总结:1.通过计算器设计,我学到了利用Qt设计简单窗口应用程序的的方法,初步了解了使用QT工具编写窗口程序的新颖,了解了槽和信号等基本知识,学会了如何使用新工具(Qt)帮助程序开发。

嵌入式系统之基于QT的简单计算器

嵌入式系统之基于QT的简单计算器

嵌入式系统之基于Q T的简单计算器The pony was revised in January 2021嵌入式系统课程设计报告题目:基于QT的简单计算器专业:计算机科学与技术班级:姓名:学号:指导老师:日期:2012-12-26第一章前言设计背景计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。

计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。

设计目的本程序是基于linux下的嵌入式开发,所用软件为QT Creator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。

通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。

第二章功能需求分析功能描述本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算。

由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。

第三章开发工具简介QT简介由于本次设计的小程序是用QT Creator所设计的,所以我觉得有必要先介绍下QT 开发工具的背景。

Qt是一个1991年由奇趣科技开发的跨平台C++图形界面应用程序开发框架。

嵌入式系统之基于QT的简单计算器

嵌入式系统之基于QT的简单计算器

嵌入式系统之基于QT的简单计算器QT是一种跨平台的应用程序开发框架,它提供了一种编写图形用户界面(GUI)程序的简便方法。

在嵌入式系统中,使用QT可以快速开发出各种功能强大、界面友好的应用程序。

对于一个简单计算器来说,主要包括用户界面设计和计算逻辑两部分。

首先,我们需要设计一个界面来展示计算器的按钮和显示结果的区域。

在QT中,可以使用QGridLayout布局管理器来创建按钮布局,同时将其连接到对应的信号槽函数上,以实现按钮的点击响应。

```cpp//main.qmlimport QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 2.12Windowvisible: truewidth: 400height: 600title: "Simple Calculator"RowLayoutspacing: 10GridLayoutid: buttonGridrows: 4columns: 4anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter Buttontext: "7"onClicked: calculator.append("7")}Buttontext: "8"onClicked: calculator.append("8")}// ... more buttons ...Buttontext: "="onClicked: calculator.calculate}// ... more buttons ...}TextFieldid: resultFieldwidth: 200height: 50placeholderText: "0"readOnly: true}}```在这个示例中,我们使用了QT的QML语言来创建用户界面。

嵌入式QT实验报告

嵌入式QT实验报告

嵌入式QT实验报告一、实验目的本次实验的目的是设计并实现一个简单的计算器应用程序,基于嵌入式QT进行开发。

通过这个实验,可以熟悉QT的控件使用、界面设计和信号与槽的连接等知识点。

二、实验原理计算器应用程序的主要功能是实现基本的数学运算,包括加、减、乘、除。

用户通过界面上的按钮输入数字和运算符,程序根据用户的输入进行相应的计算,并将结果显示在界面上。

三、系统设计1.界面设计计算器的界面主要分为两个部分,一个是数字输入框,用于用户输入数字;另一个是运算符按钮区域,用于用户选择运算符。

2.数字和运算符输入用户通过按钮选择数字和运算符,并将其显示在数字输入框中,需要使用QT的信号与槽机制来连接按钮和数字输入框。

3.计算功能根据用户选择的运算符,进行相应的数学运算,并将结果显示在数字输入框中。

需要使用switch语句来判断用户选择的运算符,并进行相应的计算。

四、实验步骤1.创建QT应用程序项目在QT Creator中创建一个新的QT Widget应用程序项目,命名为"Calculator",选择嵌入式QT版本。

2.设计界面使用QT Designer设计计算器的界面,添加一个数字输入框和若干个按钮,按钮包括数字按钮和运算符按钮。

需要注意布局和按钮的大小等细节。

3.连接信号与槽4.实现计算功能在mainwindow.cpp文件中实现计算器功能的代码。

首先声明一个私有变量operand用于保存上一次的操作数;然后根据用户选择的按钮,进行相应的计算。

五、实验结果(插入计算器界面截图)六、实验总结通过本次实验,我成功地设计并实现了一个简单的计算器应用程序。

在实验过程中,我学会了使用QT Designer设计界面,了解了QT的信号与槽机制,能够连接按钮和输入框等控件;同时,也巩固了基本的C++编程知识,熟悉了switch语句的使用。

在实验过程中,我遇到了一些问题,比如界面的布局和按钮的大小等细节问题,通过查阅文档和调试,最终解决了这些问题。

QT课程设计报告【范本模板】

QT课程设计报告【范本模板】

题目:简易计算器学院:信息科学与技术专业:软件工程姓名:学号:2014.04.19一、需求分析当今社会是信息社会,科技经济高速发展的社会,为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。

然而,电脑已经成为当代人生活的必需品,运行在电脑上的计算器成为了人们的生活学习绝佳伴侣。

下面是用C++编写的,基于Qt图形用户界面应用程序框架的计算器,它实现了对整数,浮点数的加﹑减﹑乘﹑除﹑幂运算。

二、设计过程1.界面设计在QT设计器中布置好计算器界面,所有按键采用的pushButton控件,显示计算结果采用的是lineEdit控件.完成的界面如下图所示:图计算器界面为了使按钮显示美观,将每个button的属性设置如下:图button大小、字体属性为符合人们的使用习惯,将lineEdit空间的属性更改,使得输入的数字和符号出现在空间的右边起。

如图:图lineEdit控件属性更改2.控件重命名将界面布局设计好后,将各个空间改名,例如“0"改为but0.3.简单信号响应对于button exit退出程序,这样简单的响应,直接在设计器中通过添加信号和槽来完成,如图:图信号和槽4.辅助数据成员及函数为了区分每一次计算和保存操作数、操作符,和辅助函数(如:输出函数),在calculator。

h的类中设定数据成员以及成员函数:calculat。

cpp中辅助函数的实现:5.数字键的响应以button 0为例,在calculator。

cpp文件中添加but0的代码,如下:6.小数点的响应当一个操作数已经输入了一个小数点时,将小数点按钮置为不可用,以防用户重复输入小数点,导致输入操作数不合法,如下如:7.运算功能的响应以加法为例,向lineEdit中输入显示+号,并在数据成员中保存,以便后面进行计算:8.清屏的响应首先将lineEdit的显示清除,再置为0;将一切辅助的数据成员数据重置到新一轮计算的开始状态,如:运算符为空,操作数为0等.实现如下:9.等号的响应根据数据成员记录的运算符和操作数进行相应的计算,并将得出的结果转化为string显示在lineEdit上,并重置辅助数据成员,准备下一轮的计算开始。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
与简单计算器的设计步骤基本相同。但是需要在项目文件(后缀为.pro)添加一段代码,使得程序中能使用Qt脚本,在原有代码的基础上添加。在头文件widget.h的Widget类添加共有槽函数和全局变量,以及包含头文件QtScript,以使用Qt Script API。在源文件widget.cpp中添加新代码,之后即可运行调试。
voidWidget::on_doubleSpinBox_7_valueChanged()
{
ui->outout_div->setText(QString::number(ui->doubleSpinBox_7->value()/ui->doubleSpinBox_8->value()));
}
voidWidget::on_doubleSpinBox_8_valueChanged()
voidclickNum5();//按钮5的槽函数。
voidclickNum6();//按钮6的槽函数。
voidclickNum7();//按钮7的槽函数。
voidclickNum8();//按钮8的槽函数。
voidclickNum9();//按钮9的槽函数。
voidclickNum0();//按钮0的槽函数。
{
ui->outout_minus->setText(QString::number(ui->doubleSpinBox_3->value()-ui->doubleSpinBox_4->value()));
}
voidWidget::on_doubleSpinBox_4_valueChanged()
{
ui->outout_minus->setText(QString::number(ui->doubleSpinBox_3->value()-ui->doubleSpinBox_4->value()));
}
voidWidget::on_doubleSpinBox_5_valueChanged()
{
ui->outout_multi->setText(QString::number(ui->doubleSpinBox_5->value()*ui->doubleSpinBox_6->value()));
explicitWidget(QWidget*parent=0);
~Widget();
publicslots:
voidclickNum1();//按钮1的槽函数。
voidclickNum2();//按钮2的槽函数。
voidclickNum3();//按钮3的槽函数。
voidclickNum4();//按钮4的槽函数。
};
#endif//WIDGET_H
(3)在源文件widget.cpp中
#include"widget.h"
#include"ui_widget.h"
Widget::Widget(QWidget*parent):
QWidget(parent),
ui(newUi::Widget)
{
ui->setupUi(this);
{
ui->outout_div->setText(QString::number(ui->doubleSpinBox_7->value()/ui->doubleSpinBox_8->value()));
}
Widget::~Widget()
{
deleteui;
}
2、带显示界面的计算器:
代码:
(1)在shiyanB.pro项目文件中
sum="";connect(ui->pushButton_1,SIGNAL(clicked()),this,SLOT(clickNum1()));connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(clickNum2()));connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(clickNum3()));connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(clickNum4()));connect(ui->pushButton_5,SIGNAL(clicked()),this,SLOT(clickNum5()));connect(ui->pushButton_6,SIGNAL(clicked()),this,SLOT(clickNum6()));connect(ui->pushButton_7,SIGNAL(clicked()),this,SLOT(clickNum7()));connect(ui->pushButton_8,SIGNAL(clicked()),this,SLOT(clickNum8()));connect(ui->pushButton_9,SIGNAL(clicked()),this,SLOT(clickNum9()));connect(ui->pushButton_0,SIGNAL(clicked()),this,SLOT(clickNum0()));connect(ui->pushButton_point,SIGNAL(clicked()),this,SLOT(clickPoint()));connect(ui->pushButton_lbracket,SIGNAL(clicked()),this,SLOT(clickLbracket()));connect(ui->pushButton_rbracket,SIGNAL(clicked()),this,SLOT(clickRbracket()));connect(ui->pushButton_clean,SIGNAL(clicked()),this,SLOT(clickClean()));connect(ui->pushButton_delete,SIGNAL(clicked()),this,SLOT(clickDelete()));connect(ui->pushButton_plus,SIGNAL(clicked()),this,SLOT(clickPlus()));connect(ui->pushButton_minus,SIGNAL(clicked()),this,SLOT(clickMinus()));connect(ui->pushButton_multi,SIGNAL(clicked()),this,SLOT(clickMulti()));connect(ui->pushButton_div,SIGNAL(clicked()),this,SLOT(clickDiv()));
QWidget(parent),
ui(newUi::Widget)
{
ui->setupUi(this);
}
voidWidget::on_doubleSpinBox_1_valueChanged()
{
ui->outout_plus->setText(QString::number(ui->doubleSpinBox_1->value()+ui->doubleSpinBox_2->value()));
{
Q_OBJECT
public:
explicitWidget(QWidget*parent=0);
~Widget();
privateslots:
voidon_doubleSpinBox_1_valueChanged();
voidon_doubleSpinBox_2_valueChanged();
voidon_doubleSpinBox_3_valueChanged();
QT+=coregui
QT+=script
greaterThan(QT_MAJOR_VERSION,4):QT+=widgets
TARGET=shiyanB
TEMPLATE=app
SOURCES+=main.cpp\
widget.cpp
HEADERS+=widget.h
FORMS+=widget.ui
(2)在头文件widget.h中
#ifndefWIDGET_H
#defineWIDGET_H
#include<QtScript>
#include"QWidget"
namespaceUi{
classWidget;
}
classWidget:publicQWidget
{
Q_OBJECT
public:
QStringsum;//全局变量。
voidclickPlus();//按钮+的槽函数。
voidclickMinus();//按钮-的槽函数。
voidclickMulti();//按钮*的槽函数。
voidclickDiv();//按钮/的槽函数。
voidclickEqul();//按钮=的槽函数。
private:
Ui::Widget*ui;
voidon_doubleSpinBox_8_valueChanged();
private:
Ui::Widget*ui;
};
#endif//WIDGET_H
(2)在widget.cpp源文件中
#include"widget.h"
#include"ui_widget.h"
相关文档
最新文档