简易计算器运用了MVC的设计模式,自己的C++底子薄,还没有接触到设计模式,MVC算是第一个.接下来的日子里我每会记录C++的心得与体会,跟进学习的效率.
话不多说,本文是参考网易云课堂的视频<<Qt入门精讲>>自己亲自回忆编写的,不足之处请大家指正批评.
项目代码已上传GitHub,戳此下载
第一步:在Qt设计师布局相应的按钮和显示文本,然后更改对象名称便于程序的书写,我的按钮对应的对象名如下:
这既是MVC中的View,C(Control)的话就是其实是一个概念,即用Model去控制View实现二者之间的"通讯".
第二步:新建C++类编写我们的model,为控制View做准备
头文件如下:
#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 doExpr();//进行运算
private:
int num1;
int num2;
//int result;
QString flag;
};
#endif // MODEL_H
.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::doExpr()
{
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 "EREEOR";
}
result=this->num1/this->num2;
}
else
{
return QString::number( this->num1);//将数字转换成字符串
}
return QString::number(result);//将数字转换成字符串,因为最后显示数字,再将字符串转换回数字
}
主程序的头文件如下:
#ifndef CALCULATORUI_H
#define CALCULATORUI_H
#include <QDialog>
#include <QDebug>
#include <model.h>
namespace Ui {
class CalculatorUI;
}
class CalculatorUI : public QDialog
{
Q_OBJECT
public:
explicit CalculatorUI(QWidget *parent = 0);
~CalculatorUI();
private slots:
void getBut0();
void getBut1();
void getBut2();
void on_btn_3_clicked();
void on_btn_4_clicked();
void on_btn_5_clicked();
void on_btn_6_clicked();
void on_btn_7_clicked();
void on_btn_8_clicked();
void on_btn_9_clicked();
void on_btn_add_clicked();
void on_btn_sub_clicked();
void on_btn_mul_clicked();
void on_btn_div_clicked();
void on_btn_equal_clicked();
void on_btn_clear_clicked();
private:
QString temp;
Ui::CalculatorUI *ui;//界面对象
model* mode; //核心功能的model类的对象
};
#endif // CALCULATORUI_H
主窗口的.cpp代码如下:
#include "calculatorui.h"
#include "ui_calculatorui.h"
CalculatorUI::CalculatorUI(QWidget *parent) :
QDialog(parent),
ui(new Ui::CalculatorUI)
{
ui->setupUi(this);
connect(this->ui->btn_0,SIGNAL(clicked(bool)),this,SLOT(getBut0()));
connect(this->ui->btn_1,SIGNAL(clicked(bool)),this,SLOT(getBut1()));
connect(this->ui->btn_2,SIGNAL(clicked(bool)),this,SLOT(getBut2()));
this->mode = new model;
this->temp="";//初始化为空字符串
}
CalculatorUI::~CalculatorUI()
{
delete ui;
}
void CalculatorUI::getBut0()
{
if(this->temp!="")
{
this->temp+=this->ui->btn_0->text();//获取0数字并与temp拼接
this->ui->label_display->setText(this->temp);//显示在屏幕上,以下同理
}
}
void CalculatorUI::getBut1()
{
this->temp+=this->ui->btn_1->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::getBut2()
{
this->temp+=this->ui->btn_2->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::on_btn_3_clicked()
{
this->temp+=this->ui->btn_3->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::on_btn_4_clicked()
{
this->temp+=this->ui->btn_4->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::on_btn_5_clicked()
{
this->temp+=this->ui->btn_5->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::on_btn_6_clicked()
{
this->temp+=this->ui->btn_6->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::on_btn_7_clicked()
{
this->temp+=this->ui->btn_7->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::on_btn_8_clicked()
{
this->temp+=this->ui->btn_8->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::on_btn_9_clicked()
{
this->temp+=this->ui->btn_9->text();
this->ui->label_display->setText(this->temp);
}
void CalculatorUI::on_btn_add_clicked()
{
int num = this->temp.toInt();
this->mode->setNum1(num);
this->temp="";//保证按下加减乘除后屏幕第二个数字能够呈现
QString ex=this->ui->btn_add->text();
this->mode->setFlag(ex);
}
void CalculatorUI::on_btn_sub_clicked()
{
int num = this->temp.toInt();
this->mode->setNum1(num);
this->temp="";
QString ex=this->ui->btn_sub->text();
this->mode->setFlag(ex);
}
void CalculatorUI::on_btn_mul_clicked()
{
int num = this->temp.toInt();
this->mode->setNum1(num);
this->temp="";
QString ex=this->ui->btn_mul->text();
this->mode->setFlag(ex);
}
void CalculatorUI::on_btn_div_clicked()
{ int num = this->temp.toInt();
this->mode->setNum1(num);
this->temp="";
QString ex=this->ui->btn_div->text();//读取的操作
this->mode->setFlag(ex);
}
void CalculatorUI::on_btn_equal_clicked()
{
int num=this->temp.toInt();
this->mode->setNum2(num);
QString res= this->mode->doExpr();
this->ui->label_display->setText(res);
this->temp="";
}
void CalculatorUI::on_btn_clear_clicked()
{
this->temp="";
this->ui->label_display->setText("0");
}
当然了,这个计算器存在很多缺陷,例如显示越界问题,显示数字最好用LCD管,后续再向里面添加三角函数,回归方程之类的东西,让计算器更加智能