前言:本程序是在学习网易云课堂上嵌讲师吴健老师的课程之后依照视频内容编写的,与视频原程序有细微出入。本工程以此为基础,不断改进,后期会发布功能更强的Caculator版本的源代码以及分析。
设计样式(UI可视化方法设计):
设计源代码:
1. main.cpp:
2. calulator.cpp:
#include "calulator.h"
#include "ui_calulator.h"
Calulator::Calulator(QWidget *parent) :
QDialog(parent),
ui(new Ui::Calulator)
{
ui->setupUi(this);
connect(this->ui->btn0,SIGNAL(clicked(bool)),this,SLOT(getBtn0()));
connect(this->ui->btn1,SIGNAL(clicked(bool)),this,SLOT(getBtn1()));
connect(this->ui->btn2,SIGNAL(clicked(bool)),this,SLOT(getBtn2()));
this->mode=new model;
this->tmp="";
this->initial_value="0";
}
Calulator::~Calulator()
{
delete ui;
}
void Calulator::getBtn0()
{
//non bool value-> get the value is the name, set
if(this->tmp!=""){
this->tmp+=this->ui->btn0->text();
this->ui->label_display->setText(this->tmp);
}
}
void Calulator::getBtn1()
{
this->tmp+=this->ui->btn1->text();
this->ui->label_display->setText(this->tmp);
}
void Calulator::getBtn2()
{
this->tmp+=this->ui->btn2->text();
this->ui->label_display->setText(this->tmp);
}
//using UI method
void Calulator::on_btn3_clicked()
{
this->tmp+=this->ui->btn3->text();
this->ui->label_display->setText(this->tmp);
}
void Calulator::on_btn4_clicked()
{
this->tmp+=this->ui->btn4->text();
this->ui->label_display->setText(this->tmp);
}
void Calulator::on_btn5_clicked()
{
this->tmp+=this->ui->btn5->text();
this->ui->label_display->setText(this->tmp);
}
void Calulator::on_btn6_clicked()
{
this->tmp+=this->ui->btn6->text();
this->ui->label_display->setText(this->tmp);
}
void Calulator::on_btn7_clicked()
{
this->tmp+=this->ui->btn7->text();
this->ui->label_display->setText(this->tmp);
}
void Calulator::on_btn8_clicked()
{
this->tmp+=this->ui->btn8->text();
this->ui->label_display->setText(this->tmp);
}
void Calulator::on_btn9_clicked()
{
this->tmp+=this->ui->btn9->text();
this->ui->label_display->setText(this->tmp);
}
//+
void Calulator::on_btn_plus_clicked()
{
int num=this->tmp.toInt();
this->mode->setNum1(num);
this->tmp="";
QString symbol=this->ui->btn_plus->text();
this->mode->SetFlag(symbol);
}
void Calulator::on_btn_sub_clicked()
{
int num=this->tmp.toInt();
this->mode->setNum1(num);
this->tmp="";
QString symbol=this->ui->btn_sub->text();
this->mode->SetFlag(symbol);
}
void Calulator::on_btn_mul_clicked()
{
int num=this->tmp.toInt();
this->mode->setNum1(num);
this->tmp="";
QString symbol=this->ui->btn_mul->text();
this->mode->SetFlag(symbol);
}
void Calulator::on_btn_div_clicked()
{
int num=this->tmp.toInt();
this->mode->setNum1(num);
this->tmp="";
QString symbol=this->ui->btn_div->text();
this->mode->SetFlag(symbol);
}
void Calulator::on_btn_equ_clicked()
{
int num=this->tmp.toInt();
this->mode->setNum2(num);
QString result=this->mode->Start_Cal();
this->ui->label_display->setText(result);
//this->tmp="";
}
void Calulator::on_btn_clc_clicked()
{
this->tmp="";
this->ui->label_display->setText("0");
}
3. model.cpp:
#include "model.h"
model::model()
{
this->num1=0;
this->num2=0;
}
void model::setNum1(int num){
this->num1=num;
}
void model::setNum2(int num){
this->num2=num;
}
void model::SetFlag(QString flag){
this->flag=flag;
}
QString model::Start_Cal(){
int result=0;
if (this->flag=="+") { result=this->num1+this->num2; }
else if(this->flag=="-") { result=this->num1-this->num2; }
else if(this->flag=="*") { result=this->num1*this->num2; }
else if(this->flag=="/") {
if(this->num2==0)
return "ERROR";
result=this->num1/this->num2;//the divider !=0
}
else return QString::number(this->num1);
return QString::number(result);
}
4.calculator.h
#ifndef CALULATOR_H
#define CALULATOR_H
#include <QDialog>
#include <QString>
#include "model.h"
namespace Ui {
class Calulator;
}
class Calulator : public QDialog
{
Q_OBJECT
public:
explicit Calulator(QWidget *parent = 0);
~Calulator();
private slots:
//Attention:According to the video, the Button0,1,2 was connected manually.
//The others were connected automatically by the SLOT.(Refer to the Video)
//-------------------------------------------------------------
void getBtn0();
void getBtn1();
void getBtn2();
//-------------------------------------------------------------
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_btn_plus_clicked();
void on_btn_sub_clicked();
void on_btn_mul_clicked();
void on_btn_div_clicked();
void on_btn_equ_clicked();
void on_btn_clc_clicked();
private:
QString tmp;
QString initial_value;
Ui::Calulator *ui;
model *mode;
};
#endif // CALULATOR_H
5. model.h:
#ifndef MODEL_H
#define MODEL_H
#include <QString>
class model
{
public:
model();
void setNum1(int num);
void setNum2(int num);
void SetFlag(QString flag);
QString Start_Cal();
private:
int num1;
int num2;
QString flag;
};
#endif // MODEL_H
设计成果:
预改进项:
1.对于小数的计算;
2.对于幂,sin, tan, cos等的运算;
3.连续计算;
4.进制转换;