基于QT简易计算器的设计
- 格式:ppt
- 大小:714.50 KB
- 文档页数:33
嵌入式系统之基于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编程实现简易的计算器一、实验目的1) 熟悉QtCreator的简单操作。
2) 了解Qt程序编写框架。
3) 了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。
二、实验内容1) 查看API手册,学习简单的Qt类的使用,如QLineEdit、QPushButton等。
2) 用QtCreator创建工程,用Qt编写计算器程序。
3) 对计算器程序进行移植。
三、实验步骤1. 创建工程1) 打开QtCreator,如图1所示。
选择File->New File or Project,然后在弹出的对话框中选择Other Project->Empty Qt project (如图2所示),然后进入下一步。
选择Qt版本,这里选择使用Qt4.7.1,取消对Qt in PA TH的选择(如图4所示),然后进入下一步,完成新工程的创建(如图5所示)。
实现代码Calcuulator.h代码:#ifndef CALCULATOR_H#define CALCULATOR_H#include<QApplication>#include<QDialog>#include<QPushButton>#include<QLineEdit>class Calculator:public QDialog {Q_OBJECT protected:QLineEdit *lineEditor; QPushButton *button_0; QPushButton *button_1; QPushButton *button_2; QPushButton *button_3; QPushButton *button_4; QPushButton *button_5; QPushButton *button_6; QPushButton *button_7; QPushButton *button_8; QPushButton *button_9; QPushButton *button_ce; QPushButton *button_jia; QPushButton *button_jian; QPushButton *button_cheng; QPushButton *button_chu; QPushButton *button__; QPushButton *button_dengyu; int num1,num2,result; // bool zhenghao; //int mark; //char fuhao; //QString S; //public:Calculator();private slots:void button_0_clicked();void button_1_clicked();void button_2_clicked();void button_3_clicked();void button_4_clicked();void button_5_clicked();void button_6_clicked();void button_7_clicked();void button_8_clicked();void button_9_clicked();void button_ce_clicked();void button_jia_clicked();void button_jian_clicked();void button_cheng_clicked();void button_chu_clicked();void button__clicked();void button_dengyu_clicked(); };#endif // CALCULATOR_HCalculator.cpp代码:#include<QLayout>#include<QHBoxLayout>#include<QVBoxLayout>#include<QLineEdit>#include<cmath>#include"calculator.h"Calculator::Calculator(){num1=0;num2=0;result=0;zhenghao=true;mark=1;lineEditor=new QLineEdit("0");S="";button_0=new QPushButton("0");button_1=new QPushButton("1");button_2=new QPushButton("2");button_3=new QPushButton("3");button_4=new QPushButton("4");button_5=new QPushButton("5"); button_6=new QPushButton("6"); button_7=new QPushButton("7"); button_8=new QPushButton("8"); button_9=new QPushButton("9"); button_ce=new QPushButton("CE"); button_cheng=new QPushButton("*"); button_jia=new QPushButton("+"); button_jian=new QPushButton("-"); button_chu=new QPushButton("/"); button__=new QPushButton("+/-"); button_dengyu=new QPushButton("="); QHBoxLayout *Hl1=new QHBoxLayout; QHBoxLayout *Hl2=new QHBoxLayout; QHBoxLayout *Hl3=new QHBoxLayout; QHBoxLayout *Hl4=new QHBoxLayout; QHBoxLayout *Hl5=new QHBoxLayout; Hl1->addWidget(lineEditor);Hl1->addWidget(button_ce);Hl2->addWidget(button_1);Hl2->addWidget(button_2);Hl2->addWidget(button_3);Hl2->addWidget(button_jia);Hl3->addWidget(button_4);Hl3->addWidget(button_5);Hl3->addWidget(button_6);Hl3->addWidget(button_jian);Hl4->addWidget(button_7);Hl4->addWidget(button_8);Hl4->addWidget(button_9);Hl4->addWidget(button_cheng);Hl5->addWidget(button__);Hl5->addWidget(button_0);Hl5->addWidget(button_dengyu);Hl5->addWidget(button_chu);QVBoxLayout *V1=new QVBoxLayout;V1->addLayout(Hl1);V1->addLayout(Hl2);V1->addLayout(Hl3);V1->addLayout(Hl4);V1->addLayout(Hl5);connect(button_0,SIGNAL(clicked()),this,SLOT(button_0_clicked())); connect(button_1,SIGNAL(clicked()),this,SLOT(button_1_clicked())); connect(button_2,SIGNAL(clicked()),this,SLOT(button_2_clicked()));connect(button_3,SIGNAL(clicked()),this,SLOT(button_3_clicked()));connect(button_4,SIGNAL(clicked()),this,SLOT(button_4_clicked()));connect(button_5,SIGNAL(clicked()),this,SLOT(button_5_clicked()));connect(button_6,SIGNAL(clicked()),this,SLOT(button_6_clicked()));connect(button_7,SIGNAL(clicked()),this,SLOT(button_7_clicked()));connect(button_8,SIGNAL(clicked()),this,SLOT(button_8_clicked()));connect(button_9,SIGNAL(clicked()),this,SLOT(button_9_clicked()));connect(button_jia,SIGNAL(clicked()),this,SLOT(button_jia_clicked()));connect(button_jian,SIGNAL(clicked()),this,SLOT(button_jian_clicked()));connect(button_cheng,SIGNAL(clicked()),this,SLOT(button_cheng_clicked()));connect(button_chu,SIGNAL(clicked()),this,SLOT(button_chu_clicked()));connect(button_dengyu,SIGNAL(clicked()),this,SLOT(button_dengyu_clicked()));connect(button_ce,SIGNAL(clicked()),this,SLOT(button_ce_clicked()));connect(button__,SIGNAL(clicked()),this,SLOT(button__clicked()));setLayout(V1);}void Calculator::button_0_clicked(){S+="0";lineEditor->setText(S);if(mark==1){num1=num1*10+0;}else{num2=num2*10;}}void Calculator::button_1_clicked(){ S+="1";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+1;}else{num1=num1*10-1;}}else{if(zhenghao){num2=num2*10+1;}else{num2=num2*10-1;}}}void Calculator::button_2_clicked(){lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+2;}else{num1=num1*10-2;}}else{if(zhenghao){num2=num2*10+2;}else{num2=num2*10-2;}}}void Calculator::button_3_clicked(){ S+="3";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+3;num1=num1*10-3;}}else{if(zhenghao){num2=num2*10+3;}else{num2=num2*10-3;}}}void Calculator::button_4_clicked(){ S+="4";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+4;}else{num1=num1*10-4;}}else{if(zhenghao){num2=num2*10+4;}else{num2=num2*10-4;}}}void Calculator::button_5_clicked(){ S+="5";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+5;}else{num1=num1*10-5;}}else{if(zhenghao){num2=num2*10+5;}else{num2=num2*10-5;}}}void Calculator::button_6_clicked(){ S+="6";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+6;}else{num1=num1*10-6;}}else{if(zhenghao){num2=num2*10+6;}else{num2=num2*10-6;}}}void Calculator::button_7_clicked(){ S+="7";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+7;}else{num1=num1*10-7;}}else{if(zhenghao){num2=num2*10+7;}else{num2=num2*10-7;}}}void Calculator::button_8_clicked(){ S+="8";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+8;}else{num1=num1*10-8;}if(zhenghao){num2=num2*10+8;}else{num2=num2*10-8;}}}void Calculator::button_9_clicked(){ S+="9";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+9;}else{num1=num1*10-9;}}else{if(zhenghao){num2=num2*10+9;}else{num2=num2*10-9;}}void Calculator::button_jia_clicked(){ S+="+";lineEditor->setText(S);zhenghao=true;fuhao='+';mark=2;}void Calculator::button_jian_clicked(){ S+="-";lineEditor->setText(S);zhenghao=true;fuhao='-';mark=2;}void Calculator::button_cheng_clicked(){ S+="*";lineEditor->setText(S);zhenghao=true;fuhao='*';}void Calculator::button_chu_clicked(){S+="/";lineEditor->setText(S);zhenghao=true;fuhao='/';mark=2;}void Calculator::button__clicked(){S+="-";lineEditor->setText(S);zhenghao=false;}void Calculator::button_dengyu_clicked(){ S+="=";// lineEditor->setText(S);switch(fuhao){case '+':result=num1+num2;break;case '-':result=num1-num2;break;case '*':result=num1*num2;break;case '/':if(num2)result=num1/num2;break;}int i=0;int result1=result;while(result1){i++;result1/=10;}for(;i;i--){S+=(result/(int)pow(10,i-1)+'0');result%=(int)pow(10,i-1);}lineEditor->setText(S);zhenghao=true;num1=num2=0;mark=1;S="";}void Calculator::button_ce_clicked(){zhenghao=false;S="";lineEditor->setText("0");num1=num2=0;mark=1;}Main代码:#include"calculator.h"int main(int argc,char *argv[]) {QApplication app(argc,argv);Calculator cal;cal.show();return app.exec();}运行结果四、总结通过计算器设计,学到了利用Qt设计简单窗口应用程序的的方法,初步了解了使用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语句的使用。
在实验过程中,我遇到了一些问题,比如界面的布局和按钮的大小等细节问题,通过查阅文档和调试,最终解决了这些问题。
简易计算器的设计与实现设计一个简易计算器涉及以下几个方面:1.需求分析:-定义计算器的功能-确定计算器支持的数学运算,如加法、减法、乘法、除法等2.用户界面设计:-设计计算器的界面布局,包括数字按键、运算符按键、等号按键等-考虑使用框架或库来构建用户界面3.输入处理:-设计解析用户输入的算式-处理用户点击按键时的输入4.运算处理:-实现各种数学运算的算法-将用户输入的算式传入运算处理函数进行计算5.显示结果:-将计算结果显示在计算器的界面上下面是一个简易计算器的实现示例,使用Python语言和PyQt库来构建:```pythonimport sysfrom PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QGridLayout, QPushButton, QLineEdit class Calculator(QWidget):def __init__(self):super(.__init__self.setWindowTitle("简易计算器")yout = QVBoxLayoutself.input_box = QLineEdityout.addWidget(self.input_box)self.buttons =['7','8','9','/'],['4','5','6','*'],['1','2','3','-'],['0','.','=','+']self.grid_layout = QGridLayoutfor i in range(4):for j in range(4):button = QPushButton(self.buttons[i][j])button.clicked.connect(self.button_clicked)self.grid_layout.addWidget(button, i, j)yout.addLayout(self.grid_layout)self.setLayout(yout)self.equal_clicked = Falsedef button_clicked(self):button = self.sendertext = button.textif text == '=':self.calculateelse:self.input_box.setText(self.input_box.text( + text) def calculate(self):expression = self.input_box.texttry:result = eval(expression)self.input_box.setText(str(result))except Exception as e:self.input_box.setText("错误:{}".format(e))if __name__ == '__main__': app = QApplication(sys.argv) calculator = Calculator calculator.showsys.exit(app.exec_()。
题目:简易计算器学院:信息科学与技术专业:软件工程姓名:学号: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上,并重置辅助数据成员,准备下一轮的计算开始。
基于QT的计算器的实现张会摘要:该文利用 Qt框架,应用Qt信号槽机制实现了一个带括号的加减乘除的四则混合运算功能的计算器。
该计算器是一个集继承、图形界面、事件处理等面向对象编程知识的综合应用的实例程序。
关键词:Qt;后缀表达式;计算器;C++中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)32-0276-031 背景Windows系统的“标准计算器”只能实现不判断优先级的简单的加减乘除计算,而不能正确实现带括号的四则混合计算,该文利用Qt图形库,采用C++语法规则,在Qt Creator集成开发环境下,实现了一个基于Qt的计算器,此计算器能帮助学生进一步理解C++中的面向对象程序设计思想。
2 Qt的特点Qt被用于高性能的跨平台软件开发,它是一个标准的技术成熟的C++框架,Qt不仅拥有扩展的C++类库,还提供了大量可用来快速编写应用程序的工具[1] ,Qt是采用C++实现的框架。
Qt Creator是一款新的轻量级集成开发环境(IDE), IDE支持跨平台运行,支持的系统包括 Mac OS X 、Linux( 32 位及 64 位)以及Windows等系统。
Qt Creator的设计目标是方便开发人员利用 Qt这个应用程序框架更加快速、轻易地完成相关开发任务[2]。
3 功能设计计算器主要实现了以下功能:1)输入包含括号的四则混合运算计算式。
2)单击等号按钮自动按先计算乘除再计算加减,有括号先计算括号的计算原则进行四则混合运算功能。
3)退格功能,单击退格按钮,实现把输入的计算表达式最后一个数字或运算符删除,以实现对错误输入的内容删除后进行修改。
4)清空功能,单击C清空按钮,可以直接将输入的所有内容清除掉,而不需要用退格键逐一删除,5)小数点只能输入一次,当一个小数已经输入了一个小数点后,此数无法再输入一个小数点,从而保证小数点在一个小数中的唯一性。
6)计算完一次结果后,当重新输入计算表达式想实现再次计算时,会自动把前一次的结果直接清除掉,而不需要单击清空按钮清除上次计算结果后再计算。
tkinter简易计算器的设计与实现实验报告心得体会一.设计任务及要求1.1实验任务:根据计算器的原理设计一个具有加减乘除功能的简易计算器。
如:5+3*4/8=4。
1.2实验基本要求:(1)实现最大输入两位十进制数字的四则运算(加减乘除)。
(2)能够实现多次连算(无优先级,从左到右计算结果)。
如:12+34*56-78/90+9=36(3)最大长度以数码管最大个数为限,溢出报警。
二.实验设计方案(1)用QuartusII的原理图输入来完成系统的顶层设计。
(2)用VHDL编写以及直接拖模块来各功能模块。
(3)通过2个脉冲分别实现个位数和十位数的输入。
(4)通过选择每次的输出数值,将输出值反馈到运算输入端(4)通过除法运算实现十六进制到十进制的转换输出。
三系统硬件设计FPGA:EP2C5T144C8目标板及相应外围硬件电路。
(从略)四系统软件设计1.数据输入模块原理:用VHDL创建模块,通过两个脉冲分别对两个数码管进行输入控制,再通过相应运算模块将两个独立数据转化成两位十进制数字。
2.运算模块原理:用VHDL创建模块,四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号来时,将所得结果反馈给运算模块输入端。
具体实现代码见附录二。
3.输出模块原理:用VHDL创建模块,通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据,并且通过除法模块将十六进制转化为十进制。
当输出结果溢出是LED0亮,同时数码管显示都为零。
部分实现见附录二。
五实验调试输入数据12,再按加法键,输入第二个数字25,按等号键,数码管显示37;按灭加法、等号键,输入第二个数据2,依次按等号键,减法键,数码管显示35;同上,按灭减法键、等号键,输入第三个数据7,依次按等号键,除法键,数码管显示5;按灭除法键、等号键,输入第四个数据99,依次按等号键,乘法键,数码管显示495,按灭乘法键、等号键,当前显示为99,依次按等号键、乘法键,数码管显示49005,同上进行若干次之后,结果溢出,LED0亮,同时数码管显示都为零。
Qt编写计算器(界⾯)看了⼏个视频,写了个计算器的界⾯#include <QApplication>#include <QWidget>#include <QLineEdit>#include <QPushButton>int main(int argc, char *argv[]){QApplication a(argc, argv);QWidget* w = new QWidget(NULL,Qt::WindowCloseButtonHint);//没有最⼤最⼩化按钮QLineEdit* Le = new QLineEdit(w);QPushButton* Button[20] = {0};const char* BtnText[20]={"7","8","9","+","(","4","5","6","-",")","1","2","3","*","<-","0",".","=","/","C"};Le->move(10,10);Le->resize(240,30);Le->setReadOnly(true);//⽂本框只读,不能通过键盘输⼊for(int i = 0;i<4;i++){for(int j = 0;j<5;j++){Button[i*5+j] = new QPushButton(w);Button[i*5+j]->resize(40,40);Button[i*5+j]->move(10 + (10 + 40)*j,(10+40) + (10 + 40)*i);Button[i*5+j]->setText(BtnText[i*5+j]);}}w->setWindowTitle("计算器");w->show();w->setFixedSize(w->width(),w->height());//锁定窗⼝⼤⼩/** w->show();* w->setFixedSize(w->width(),w->height());//锁定窗⼝⼤⼩* 这两句顺序不能反*/return a.exec();}运⾏界⾯如下。
QT课程作业设计题目:科学计算器小组成员:启敬 201113010409 阳 201113010405何亚洲 201113010407 王勇 201113010404 黄昭宇 201113010421一、功能设计要求:特别声明:本程序系QT5编译制作科学计算器两种计算器模式:一个普通模式,一个科学模式。
参照windows7 的“计算器”程序说明:在查看菜单下有两个菜单项:“标准型”、“科学型”。
当用户选择标准型的时候,只有一个显示区,显示用户当前键入的数据或计算结果;当用户选择科学型的时候,有两个显示区,其中最上面有个显示用户当前键入的数据或计算的结果,也就是标准型的显示区,它的下面(MC 按钮的左边)有一个显示区用来显示当前用户临时保存在Memory 中的数据。
在编辑菜单下有“复制”和“粘贴”两个菜单项,其功能与 windows的计算器一样。
帮助菜单下有“关于计算器”菜单项,点击该菜单项时弹出一个对话框,显示信息(包含开发者名字、学号)。
功能介绍:对于计算器我们都很熟悉,在平常的生活中也经常用到。
本次设计的科学计算器不但可以计算普通的加减乘除运算,还可以对于三角函数,乘方,对数等一些运算。
二、详细的设计介绍1.界面设计界面设计我们是使用Qt creator进行设计的,首先创建QMainWindow(parent).ui,这个界面为QWidget。
然后在左侧的Widget Box找相应的控件添加到QMainWindow(parent)里。
然后添加相应的按钮,lineEdit控件作为算式显示窗口和结果显示窗口,pushButton作为相应数字和功能按钮等,并将它们的名称属性修改。
相应的属性修改:动作编辑器的设置:信号槽设置:设计出的界面如下:标准型:科学型:实现信息:界面的相关代码:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include<QMainWindow>namespace Ui{class MainWindow;}class MainWindow:public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget*parent=0);~MainWindow();private slots://存储槽口void on_btnMjian_clicked();void on_btnMjia_clicked();void on_btnMS_clicked();void on_btnMR_clicked();void on_btnMC_clicked();void about();void copy();void paste();//标准型和科学型槽口void on_action_S_triggered();void on_action_T_triggered();//0-9槽函数的定义void on_btn1_clicked();void on_btn2_clicked();void on_btn3_clicked();void on_btn4_clicked();void on_btn5_clicked();void on_btn6_clicked();void on_btn7_clicked();void on_btn8_clicked();void on_btn9_clicked();void on_btn0_clicked();void on_btnPoint_clicked();//点void additiveOperatorClicked(QString);//加法器void multiplicativeOperatorClicked(QString);//乘法器//void kuohaoOperatorClicked(QString);//括号运算void on_btnBackspace_clicked();//退格void on_btnClear_clicked();//初始化void on_btnPlus_clicked();//符号的改变void on_btnCE_clicked();//清屏void on_btnSqrt_clicked();//开方void on_btnPercent_clicked();//百分号void on_btn_1_x_clicked();// 1/xvoid on_btnEql_clicked();//等于void clickbtn1(QString);//数字void clickbtn2(QString);//一元操作运算void on_btnAdd_clicked();//加void on_btnSubtract_clicked();//减void on_btnMultiply_clicked();//乘void on_btnDivide_clicked();//除void on_btnPi_clicked();//按键Pivoid on_btnLn_clicked();//按键Lnvoid on_btnSinh_clicked();//按键sinh void on_btnSin_clicked();//按键Sinvoid on_btnX_2_clicked();//按键X^2 void on_btnN_class_clicked();//按键N! void on_btnCosh_clicked();//按键Cosh void on_btnCos_clicked();//按键Cos void on_btnX_y_clicked();//按键x^y void on_btnX___y_clicked();//按键x√y void on_btnTanh_clicked();//按键tanh void on_btnTan_clicked();//按键tan void on_btnX_3_clicked();//按键x^3 void on_btnX___3_clicked();//按键3√x void on_btnExp_clicked();//按键evoid on_btnMod_clicked();//按键mod void on_btnLog_clicked();//按键log void on_btn10_x_clicked();//按键10^x void on_btnLkuo_clicked();//按键 (void on_btnRkuo_clicked();//按键 )private:Ui::MainWindow*ui;QString B;//标记等号状态QString C;//标记一元操作状态QString D;//标记add运算符状态QString E;//标记mul运算符状态QString F;//标记x_y,x__yQString K;//标记括号状态QString M;//QString G;//标记x__yvoid abortOperation();//错误判断double sumInMemory;//记忆存储double sumSoFar;//加double factorSoFar;//乘double SoFar;//幂double kuohao;//括号QString pendingAdditiveOperator;QString pendingMultiplicativeOperator;QString pendingOperator1;QString kuoOperator;//括号操作bool calculate(double rightOperand,const QString&pendingOperator); };#endif// MAINWINDOW_H2.计算功能的设计2.1.关于计算机的初始化和相关版本的代码:#include"mainwindow.h"#include"ui_mainwindow.h"#include"QMessageBox"#include<math.h>//#define exp=2.71828//#define pi=3.14159MainWindow::MainWindow(QWidget*parent):QMainWindow(parent), ui(new Ui::MainWindow){ui->setupUi(this);ui->groupBox->hide();//科学计算框默认隐藏layout()->setSizeConstraint(QLayout::SetFixedSize);sumInMemory=0.0;//变量初始化sumSoFar=0.0;factorSoFar=0.0;SoFar=0.0;B="0";C="0";K="0";ui->lineEdit->setText("0");ui->lineEdit->setReadOnly(true);//将文本编辑框设置为不可更改ui->lineEdit->setAlignment(Qt::AlignRight);//设置成右对齐ui->lineEdit_2->setReadOnly(true);//将文本编辑框设置为不可更改QFont font=ui->lineEdit->font();//设置字体font.setPointSize(font.pointSize()+6);ui->lineEdit->setFont(font);}MainWindow::~MainWindow(){delete ui;}void MainWindow::about()//关于计算器(A){QMessageBox::about(this,tr("关于计算器(A)"),tr("<b>版本号:</b> v1.0.0.0<li>""<b>开发者:</b> 启敬 201113010409<li>""<div align=right>阳 201113010405</div>""<div align=right>何亚洲 201113010407</div>""<div align=right>王勇 201113010404</div>""<div align=right>黄昭宇 201113010421</div>"));}2.2.数字按键、等号等按钮代码:void MainWindow::on_btnEql_clicked()//按键=号{if(!ui->lineEdit_2->text().contains("=")){double operand=ui->lineEdit->text().toDouble();QString A=ui->lineEdit->text();if(!pendingOperator1.isEmpty()){calculate(operand,pendingOperator1);operand=SoFar;SoFar=0.0;pendingOperator1.clear();}if(!pendingMultiplicativeOperator.isEmpty()){if(!calculate(operand,pendingMultiplicativeOperator)) {abortOperation();return;}operand=factorSoFar;factorSoFar=0.0;pendingMultiplicativeOperator.clear();}if(!pendingAdditiveOperator.isEmpty()){if(!calculate(operand,pendingAdditiveOperator)){abortOperation();return;}pendingAdditiveOperator.clear();}else{sumSoFar=operand;}ui->lineEdit->setText(QString::number(sumSoFar));if(K!="1"){if(C!="1")ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+"="+QString::number(sumSoFar));else ui->lineEdit_2->setText(ui->lineEdit_2->text()+"="+QString::number(sumSoFar));}else ui->lineEdit_2->setText(ui->lineEdit_2->text()+"="+QString::number(sumSoFar));sumSoFar=0.0;B="1";C="0";}}//0-9槽函数void MainWindow::on_btn0_clicked()//0号键的槽函数{clickbtn1("0");}void MainWindow::on_btn1_clicked()//1号键的槽函数{clickbtn1("1");}void MainWindow::on_btn2_clicked()//2号键的槽函数{clickbtn1("2");}void MainWindow::on_btn3_clicked()//3号键的槽函数{clickbtn1("3");}void MainWindow::on_btn4_clicked()//4号键的槽函数{clickbtn1("4");}void MainWindow::on_btn5_clicked()//5号键的槽函数{clickbtn1("5");}void MainWindow::on_btn6_clicked()//6号键的槽函数{clickbtn1("6");}void MainWindow::on_btn7_clicked()//7号键的槽函数{clickbtn1("7");}void MainWindow::on_btn8_clicked()//8号键的槽函数{clickbtn1("8");}void MainWindow::on_btn9_clicked()//9号键的槽函数{clickbtn1("9");}void MainWindow::on_btnPoint_clicked()//Point键的槽函数{if(!ui->lineEdit->text().contains("."))ui->lineEdit->setText(ui->lineEdit->text()+tr("."));}void MainWindow::on_btnBackspace_clicked()//backspace槽函数的定义{QString operand=ui->lineEdit->text();operand.chop(1);if(operand.isEmpty()){operand="0";}ui->lineEdit->setText(operand);}void MainWindow::on_btnCE_clicked()//按键CE=清楚屏幕{ui->lineEdit->setText("0");}2.3.计算槽的相关代码:bool MainWindow::calculate(double rightOperand,const QString &pendingOperator)//计算槽,栈{if(pendingOperator==tr("+")){sumSoFar+=rightOperand;}else if(pendingOperator==tr("-")){sumSoFar-=rightOperand;}else if(pendingOperator==tr("*")){factorSoFar*=rightOperand;}else if(pendingOperator==tr("/")){if(rightOperand==0.0)return false;factorSoFar/=rightOperand;}else if(pendingOperator==tr("x_y")){SoFar=pow(SoFar,rightOperand);}else if(pendingOperator==tr("x__y")){if(rightOperand<=0.0)return false;SoFar=pow(rightOperand,1.0/SoFar);}return true;}void MainWindow::clickbtn1(QString btn)//按键数字{if(ui->lineEdit->text()=="0")ui->lineEdit->setText(btn);}else if(!pendingOperator1.isEmpty()){if(F!="0"){ui->lineEdit->setText(btn);F="0";}else ui->lineEdit->setText(ui->lineEdit->text()+btn); }else if(!pendingMultiplicativeOperator.isEmpty()){if(D!="0"){ui->lineEdit->setText(btn);D="0";}else ui->lineEdit->setText(ui->lineEdit->text()+btn); }else if(!pendingAdditiveOperator.isEmpty()){if(E!="0"){ui->lineEdit->setText(btn);E="0";}else ui->lineEdit->setText(ui->lineEdit->text()+btn); }else{if(B!="1")ui->lineEdit->setText(ui->lineEdit->text()+btn); else{ui->lineEdit->setText(btn);B="0";}}2.4.一元操作运算的相关代码:void MainWindow::clickbtn2(QString btn)//一元操作运算{double operand=ui->lineEdit->text().toDouble(); double result=0.0;if(btn==tr("Sqrt")){if(operand<0.0){abortOperation();return;}result=sqrt(operand);}else if(btn==tr("x__3")){if(operand<0.0){abortOperation();return;}result=pow(operand,1.0/3.0);}else if(btn==tr("pi")){result=3.14159;}else if(btn==tr("exp")){result=2.71828;}else if(btn==tr("x_2")){result=pow(operand,2.0);else if(btn==tr("10_x")){result=pow(10.0,operand);}else if(btn==tr("x_3")){result=pow(operand,3.0);}else if(btn==tr("%")){result=operand/100.0;}else if(btn==tr("1/x")){if(operand==0.0){abortOperation();return;}result=1.0/operand;}else if(btn==tr("ln")){if(operand<0.0){abortOperation();return;}result=log(operand);QString str=QString::number(result,'f',4); result=str.toDouble();}else if(btn==tr("log10")){if(operand<0.0){abortOperation();return;}result=log10(operand);}else if(btn==tr("n!")){int i,j=1;if(operand>0.0){for(i=2;i<=operand;i++){j*=i;}result=j;}else if(operand<0.0){abortOperation();return;}else result=1;}else if(btn==tr("sinh")){result=sinh(operand);}else if(btn==tr("sin")){double a=operand/57.1158;result=sin(a);QString str=QString::number(result,'f',2); result=str.toDouble();}else if(btn==tr("cosh")){result=cosh(operand);}else if(btn==tr("cos"))double a=operand/57.1158;result=cos(a);QString str=QString::number(result,'f',2);result=str.toDouble();}else if(btn==tr("tanh")){result=tanh(operand);}else if(btn==tr("tan")){double a=operand/57.1158;result=tan(a);QString str=QString::number(result,'f',2);result=str.toDouble();}ui->lineEdit->setText(QString::number(result));}void MainWindow::abortOperation()//abortOperation的定义{on_btnClear_clicked();ui->lineEdit->setText(tr("Error"));}2.5.计算器运算实现代码:void MainWindow::additiveOperatorClicked(QString clickedOperator)//加法器{double operand=ui->lineEdit->text().toDouble();double A=ui->lineEdit->text().toDouble();if(!pendingOperator1.isEmpty()){calculate(operand,pendingOperator1);operand=SoFar;ui->lineEdit->setText(QString::number(SoFar));SoFar=0.0;//pendingOperator1.clear();if(!pendingMultiplicativeOperator.isEmpty()){if(!calculate(operand,pendingMultiplicativeOperator)) {abortOperation();return;}ui->lineEdit->setText(QString::number(factorSoFar));operand=factorSoFar;factorSoFar=0.0;//pendingMultiplicativeOperator.clear();}if(!pendingAdditiveOperator.isEmpty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(A)+clickedOperator);if(!calculate(operand,pendingAdditiveOperator)){abortOperation();return;}ui->lineEdit->setText(QString::number(sumSoFar));}else{sumSoFar=operand;if(!pendingOperator1.isEmpty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(A)+clickedOperator);}else if(!pendingMultiplicativeOperator.isEmpty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(A)+clickedOperator);}else{if(K!="0"){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(operand)+clickedOperator);}else ui->lineEdit_2->setText(QString::number(operand)+clickedOperator);}}pendingMultiplicativeOperator.clear();pendingOperator1.clear();E="1";pendingAdditiveOperator=clickedOperator;}void MainWindow::multiplicativeOperatorClicked(QString clickedOperator)//乘法器{double operand=ui->lineEdit->text().toDouble();double A=ui->lineEdit->text().toDouble();if(!pendingOperator1.isEmpty()){calculate(operand,pendingOperator1);operand=SoFar;ui->lineEdit->setText(QString::number(SoFar));SoFar=0.0;//pendingOperator1.clear();}if(!pendingMultiplicativeOperator.isEmpty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(A)+clickedOperator);if(!calculate(operand,pendingMultiplicativeOperator)){abortOperation();return;}ui->lineEdit->setText(QString::number(factorSoFar));}else{factorSoFar=operand;if(!pendingOperator1.isEmpty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(A)+clickedOperator);}else if(!pendingAdditiveOperator.isEmpty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(A)+clickedOperator);}else{if(K!="0"){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(operand)+clickedOperator);}else ui->lineEdit_2->setText(QString::number(operand)+clickedOperator);}}pendingOperator1.clear();pendingMultiplicativeOperator=clickedOperator;D="1";}//MC,MR,MS,M+,M-槽的定义void MainWindow::on_btnMC_clicked()//按键MC=memory clear {sumInMemory=0.0;ui->lineEdit_2->setText("M=0");//edit_2显示存储中的数据ui->lineEdit->setText("0");}void MainWindow::on_btnMR_clicked()//按键MR=memory read{C="1";ui->lineEdit->setText(QString::number(sumInMemory));QString M=QString::number(sumInMemory);if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+M);}else ui->lineEdit_2->setText("M="+QString::number(sumInMemory));}void MainWindow::on_btnMS_clicked()//按键MS=memory save{on_btnEql_clicked();sumInMemory=ui->lineEdit->text().toDouble();ui->lineEdit_2->setText("M="+QString::number(sumInMemory));//edit_2显示存储中的数据}void MainWindow::on_btnMjia_clicked()//按键M+{on_btnEql_clicked();sumInMemory+=ui->lineEdit->text().toDouble();ui->lineEdit_2->setText("M="+QString::number(sumInMemory));//edit_2显示存储中的数据}void MainWindow::on_btnMjian_clicked()//按键M-{on_btnEql_clicked();sumInMemory-=ui->lineEdit->text().toDouble();ui->lineEdit_2->setText("M="+QString::number(sumInMemory));//edit_2显示存储中的数据}void MainWindow::on_btnAdd_clicked()//+号键{additiveOperatorClicked("+");C="0";if(B!="0"){ui->lineEdit_2->setText(ui->lineEdit->text()+"+"); }}void MainWindow::on_btnSubtract_clicked()//-号键{additiveOperatorClicked("-");C="0";if(B!="0"){ui->lineEdit_2->setText(ui->lineEdit->text()+"-");}//else ui->lineEdit_2->setText(ui->lineEdit->text()+"-"); }void MainWindow::on_btnMultiply_clicked()//*号键{multiplicativeOperatorClicked("*");C="0";if(B!="0"){ui->lineEdit_2->setText(ui->lineEdit->text()+"*");}}void MainWindow::on_btnDivide_clicked()///号键{multiplicativeOperatorClicked("/");C="0";if(B!="0"){ui->lineEdit_2->setText(ui->lineEdit->text()+"/");}void MainWindow::on_btnPlus_clicked()//按键正负{QString operand=ui->lineEdit->text();double value=operand.toDouble();if(value>0.0){operand.prepend(tr("-"));}else if(value<0.0){operand.remove(0,1);}ui->lineEdit->setText(operand);}void MainWindow::on_btnSqrt_clicked()//按键开方{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"√("+A+")");}else ui->lineEdit_2->setText("√("+A+")");clickbtn2("Sqrt");}void MainWindow::on_btnPercent_clicked()//按键%{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+"%");}else ui->lineEdit_2->setText(A+"%");clickbtn2("%");}void MainWindow::on_btn_1_x_clicked()//按键1/x{clickbtn2("1/x");}void MainWindow::on_btnPi_clicked()//按键pi{C="1";if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"π");}else ui->lineEdit_2->setText("π");clickbtn2("pi");}void MainWindow::on_btnLn_clicked()//按键ln{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"ln"+A);}else ui->lineEdit_2->setText("ln"+A);clickbtn2("ln");}void MainWindow::on_btnSinh_clicked()//按键sinh{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"sinh("+A+")");}else ui->lineEdit_2->setText("sinh("+A+")");clickbtn2("sinh");}void MainWindow::on_btnSin_clicked()//按键sin{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"sin("+A+")");}else ui->lineEdit_2->setText("sin("+A+")");clickbtn2("sin");}void MainWindow::on_btnX_2_clicked()//按键x^2{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+"^");}else ui->lineEdit_2->setText(A+"^"+"2");clickbtn2("x_2");}void MainWindow::on_btnN_class_clicked()//按键n!{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+"!");}else ui->lineEdit_2->setText(A+"!");clickbtn2("n!");}void MainWindow::on_btnCosh_clicked()//按键cosh{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"cosh("+A+")");}else ui->lineEdit_2->setText("cosh("+A+")");clickbtn2("cosh");}void MainWindow::on_btnCos_clicked()//按键cos{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"cos("+A+")");}else ui->lineEdit_2->setText("cos("+A+")");clickbtn2("cos");}void MainWindow::on_btnX_y_clicked()//按键x^y{double operand=ui->lineEdit->text().toDouble();if(operand<=0.0){abortOperation();return;}if(!pendingOperator1.isEmpty()){calculate(operand,pendingOperator1);ui->lineEdit->setText(QString::number(SoFar));}else{SoFar=operand;pendingOperator1="x_y";}if(B!="1"){ui->lineEdit_2->setText(QString::number(operand)+"^");}else ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(operand)+"^");F="1";}void MainWindow::on_btnX___y_clicked()//按键x开y{double operand=ui->lineEdit->text().toDouble();if(!pendingOperator1.isEmpty()){calculate(operand,pendingOperator1);ui->lineEdit->setText(QString::number(SoFar));}else{SoFar=operand;pendingOperator1="x__y";}if(B!="1"){ui->lineEdit_2->setText(QString::number(operand)+"√");}else ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(operand)+"√");F="1";}void MainWindow::on_btnTanh_clicked()//按键tanh{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"tanh("+A+")");}else ui->lineEdit_2->setText("tanh("+A+")");clickbtn2("tanh");}void MainWindow::on_btnTan_clicked()//按键tan{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"tan("+A+")");}else ui->lineEdit_2->setText("tan("+A+")");clickbtn2("tan");}void MainWindow::on_btnX_3_clicked()//按键x^3{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+A+"^");}else ui->lineEdit_2->setText(A+"^"+"3");clickbtn2("x_3");}void MainWindow::on_btnX___3_clicked()//按键x开3{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"3√("+A+")");else ui->lineEdit_2->setText("3√("+A+")");clickbtn2("x__3");}void MainWindow::on_btnExp_clicked()//按键e{C="1";if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"e");}else ui->lineEdit_2->setText("e");clickbtn2("exp");}void MainWindow::on_btnMod_clicked()//按键模运算{double operand=ui->lineEdit->text().toDouble(),result;double a=modf(operand,&result);ui->lineEdit->setText(QString::number(a));if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+QString::number(a));}else ui->lineEdit_2->setText(QString::number(a));}void MainWindow::on_btnLog_clicked()//按键log{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"log("+A+")");}else ui->lineEdit_2->setText("log("+A+")");clickbtn2("log10");}void MainWindow::on_btn10_x_clicked()//按键10^x{C="1";QString A=ui->lineEdit->text();if(!pendingAdditiveOperator.isEmpty()||!pendingMultiplicativeOperator.isEmp ty()){ui->lineEdit_2->setText(ui->lineEdit_2->text()+"10^"+A);}else ui->lineEdit_2->setText("10^"+A);clickbtn2("10_x");三、一些简单运行的效果:乘法:三角函数:加乘混合运算:阶乘:幂运算:存储:心得体会,通过该作业我们获得了如何发现问题。