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 namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: 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/x void 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();//按键Pi void on_btnLn_clicked();//按键Ln void on_btnSinh_clicked();//按键sinh void on_btnSin_clicked();//按键Sin void 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();//按键e void 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__y --精品 精品--- QString K;//标记括号状态 QString M; //QString G;//标记x__y void 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_H 2. 计算功能的设计 2.1.关于计算机的初始化和相关版本的代码: #include \"mainwindow.h\" #include \"ui_mainwindow.h\" #include \"QMessageBox\" #include MainWindow::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(\"版本号: v1.0.0.0 \"开发者: 陈启敬 201113010409 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { --精品 精品--- 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { 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.isEmpty()) { ui->lineEdit_2->setText(ui->lineEdit_2->text()+\"10^\"+A); } else ui->lineEdit_2->setText(\"10^\"+A); clickbtn2(\"10_x\"); 三、 一些简单运行的效果: 乘法: 三角函数: --精品 精品--- 加乘混合运算: 阶乘: --精品 精品--- 幂运算: 存储: --精品 精品--- 心得体会,通过该作业我们获得了如何发现问题。通过问题逆向寻求根源解决问题能力。在整个作业的设计过程中,一些看似简单的问题,单独情况下可以轻易解决。单牵一发而动全身,我们必须考虑到相关涉及的各种情况。开发过程中参阅了QT助手中的计算器和一些相关的计算器项目。虽然我们的计算器不算完美,我们自我感觉还是不错。这是我们第一个作品,希望还有更多的 --精品
因篇幅问题不能全部显示,请点此查看更多更全内容