Qt实践之简易计算器的设计[附GitHub项目下载地址]

简易计算器运用了MVC的设计模式,自己的C++底子薄,还没有接触到设计模式,MVC算是第一个.接下来的日子里我每会记录C++的心得与体会,跟进学习的效率.

话不多说,本文是参考网易云课堂的视频<>自己亲自回忆编写的,不足之处请大家指正批评.

项目代码已上传GitHub,戳此下载

                                             Qt实践之简易计算器的设计[附GitHub项目下载地址]_第1张图片

第一步:在Qt设计师布局相应的按钮和显示文本,然后更改对象名称便于程序的书写,我的按钮对应的对象名如下:

                                                     Qt实践之简易计算器的设计[附GitHub项目下载地址]_第2张图片 

这既是MVC中的View,C(Control)的话就是其实是一个概念,即用Model去控制View实现二者之间的"通讯".

第二步:新建C++类编写我们的model,为控制View做准备

头文件如下:

#ifndef MODEL_H
#define MODEL_H
#include

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 
#include 
#include 

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管,后续再向里面添加三角函数,回归方程之类的东西,让计算器更加智能

你可能感兴趣的:(Qt,计算器,qt)