qt设计一个计算器

前言

     这段时间在实习,还是想把自己学到的一些记录下来,第一次接触到qt,做了一个简易的计算器,只能对整数进行四则混合运算,调试了好久,目前还没发现bug,以后还会添加一些更复杂的功能,需要继续学习。

     最后,如果有不对的地方,希望大家不吝赐教,谢谢!

先给大家看看代码:

1.dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QString>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void getBtn0();
    void getBtn1();
    void getBtn2();
    void getBtn3();
    void getBtn4();
    void getBtn5();
    void getBtn6();
    void getBtn7();
    void getBtn8();
    void getBtn9();

    void on_btn_add_clicked();
    void on_btn_sub_clicked();
    void on_btn_mul_clicked();
    void on_btn_div_clicked();
    void on_btn_equ_clicked();
    void on_btn_res_clicked();


private:
    Ui::Dialog *ui;
    double data[3];
    char op[2];
    int valuecount;
    int opcount;
    QString str;
};

#endif // DIALOG_H

2.dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include<string.h>

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    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()));
    connect(this->ui->Btn3,SIGNAL(clicked(bool)),this,SLOT(getBtn3()));
    connect(this->ui->Btn4,SIGNAL(clicked(bool)),this,SLOT(getBtn4()));
    connect(this->ui->Btn5,SIGNAL(clicked(bool)),this,SLOT(getBtn5()));
    connect(this->ui->Btn6,SIGNAL(clicked(bool)),this,SLOT(getBtn6()));
    connect(this->ui->Btn7,SIGNAL(clicked(bool)),this,SLOT(getBtn7()));
    connect(this->ui->Btn8,SIGNAL(clicked(bool)),this,SLOT(getBtn8()));
    connect(this->ui->Btn9,SIGNAL(clicked(bool)),this,SLOT(getBtn9()));
    connect(this->ui->BtnAdd,SIGNAL(clicked(bool)),this,SLOT(on_btn_add_clicked()));
    connect(this->ui->BtnSub,SIGNAL(clicked(bool)),this,SLOT(on_btn_sub_clicked()));
    connect(this->ui->BtnMul,SIGNAL(clicked(bool)),this,SLOT(on_btn_mul_clicked()));
    connect(this->ui->BtnDiv,SIGNAL(clicked(bool)),this,SLOT(on_btn_div_clicked()));
    connect(this->ui->BtnEqu,SIGNAL(clicked(bool)),this,SLOT(on_btn_equ_clicked()));
    connect(this->ui->BtnRes,SIGNAL(clicked(bool)),this,SLOT(on_btn_res_clicked()));

    valuecount=0;
    memset(data,0,sizeof data);
    opcount=0;
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::getBtn0()
{
    QString temp;
    data[valuecount]=data[valuecount]*10;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn1()
{
    data[valuecount]=data[valuecount]*10+1;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn2()
{
    data[valuecount]=data[valuecount]*10+2;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn3()
{
     data[valuecount]=data[valuecount]*10+3;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn4()
{
     data[valuecount]=data[valuecount]*10+4;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn5()
{
     data[valuecount]=data[valuecount]*10+5;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn6()
{
    data[valuecount]=data[valuecount]*10+6;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn7()
{
    data[valuecount]=data[valuecount]*10+7;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn8()
{
    data[valuecount]=data[valuecount]*10+8;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::getBtn9()
{
    data[valuecount]=data[valuecount]*10+9;
    QString temp;
    temp=QString::number(data[valuecount]);
    this->ui->lineEdit->setText(temp);
    str=str+temp;
    ui->lineEdit_2->setText(str);
}

void Dialog::on_btn_add_clicked()
{
    if(valuecount==0)
    {
        valuecount++;
        op[opcount]='+';
        str=str+"+";
        ui->lineEdit_2->setText(str);
    }
    else
    {
        str=str+"+";
        ui->lineEdit_2->setText(str);
        valuecount++;
        if(op[opcount]=='+')
        {
            op[opcount]='+';
            data[0]+=data[1];
            data[1]=0;
            valuecount--;
            ui->lineEdit->setText(QString::number(data[0]));
        }
        else if(op[opcount]=='-')
        {
            data[0]-=data[1];
            data[1]=0;
            valuecount--;
            ui->lineEdit->setText(QString::number(data[0]));
            op[opcount]='+';
        }
        else if(op[opcount]=='*')
        {
            if(opcount==1)
            {
                data[1]*=data[2];
                if(op[0]=='+')
                    data[0]+=data[1];
                else if(op[0]=='-')
                    data[0]-=data[1];
                valuecount-=2;
                data[1]=0;
                data[2]=0;
                ui->lineEdit->setText(QString::number(data[0]));
                opcount--;
                op[opcount]='+';
            }
            else if(opcount==0)
            {
                data[0]*=data[1];
                data[1]=0;
                ui->lineEdit->setText(QString::number(data[0]));
                valuecount--;
                op[opcount]='+';
            }

        }
        else if(op[opcount]=='/')
        {
            if(opcount==1)
            {
                data[1]/=data[2];
                if(op[0]=='+')
                    data[0]+=data[1];
                else if(op[0]=='-')
                    data[0]-=data[1];
                valuecount-=2;
                data[1]=0;
                data[2]=0;
                ui->lineEdit->setText(QString::number(data[0]));
                opcount--;
                op[opcount]='+';
            }
            else if(opcount==0)
            {
                data[0]/=data[1];
                data[1]=0;
                ui->lineEdit->setText(QString::number(data[0]));
                valuecount--;
                op[opcount]='+';
            }
        }
    }

}

void Dialog::on_btn_sub_clicked()
{
    if(valuecount==0)
    {
        valuecount++;
        op[opcount]='-';
        str=str+"-";
        ui->lineEdit_2->setText(str);
    }
    else
    {
        str=str+"-";
        ui->lineEdit_2->setText(str);
        valuecount++;
        if(op[opcount]=='-')
        {
            op[opcount]='-';
            data[0]-=data[1];
            data[1]=0;
            valuecount--;
            ui->lineEdit->setText(QString::number(data[0]));
        }
        else if(op[opcount]=='+')
        {
            data[0]+=data[1];
            data[1]=0;
            valuecount--;
            ui->lineEdit->setText(QString::number(data[0]));
            op[opcount]='-';
        }
        else if(op[opcount]=='*')
        {
            if(opcount==1)
            {
                data[1]*=data[2];
                if(op[0]=='+')
                    data[0]+=data[1];
                else if(op[0]=='-')
                    data[0]-=data[1];
                valuecount-=2;
                data[1]=0;
                data[2]=0;
                ui->lineEdit->setText(QString::number(data[0]));
                opcount--;
                op[opcount]='-';
            }
            else if(opcount==0)
            {
                data[0]*=data[1];
                data[1]=0;
                ui->lineEdit->setText(QString::number(data[0]));
                valuecount--;
                op[opcount]='-';
            }

        }
        else if(op[opcount]=='/')
        {
            if(opcount==1)
            {
                data[1]/=data[2];
                if(op[0]=='+')
                    data[0]+=data[1];
                else if(op[0]=='-')
                    data[0]-=data[1];
                valuecount-=2;
                data[1]=0;
                data[2]=0;
                ui->lineEdit->setText(QString::number(data[0]));
                opcount--;
                op[opcount]='-';
            }
            else if(opcount==0)
            {
                data[0]/=data[1];
                data[1]=0;
                ui->lineEdit->setText(QString::number(data[0]));
                valuecount--;
                op[opcount]='-';
            }
        }
    }
}

void Dialog::on_btn_mul_clicked()
{
    if(valuecount==0)
    {
        valuecount++;
        op[opcount]='*';
        str=str+"*";
        ui->lineEdit_2->setText(str);
    }
    else
    {
        str=str+"*";
        ui->lineEdit_2->setText(str);
        valuecount++;
        if(op[opcount]=='*')
        {
            data[opcount]*=data[opcount+1];
            data[opcount+1]=0;
            //ui->lineEdit->setText(QString::number(data[0]));
            valuecount--;
        }
        else if(op[opcount]=='+')
        {
            opcount++;
            op[opcount]='*';
        }
        else if(op[opcount]=='-')
        {
            opcount++;
            op[opcount]='*';
        }
        else if(op[opcount]=='/')
        {
            data[opcount]/=data[opcount+1];
            data[opcount+1]=0;
            //ui->lineEdit->setText(QString::number(data[0]));
            valuecount--;
            op[opcount]='*';
        }
    }

}

void Dialog::on_btn_div_clicked()
{
    if(valuecount==0)
    {
        valuecount++;
        op[opcount]='/';
        str=str+"/";
        ui->lineEdit_2->setText(str);
    }
    else
    {
        str=str+"/";
        ui->lineEdit_2->setText(str);
        valuecount++;
        if(op[opcount]=='/')
        {
            data[opcount]/=data[opcount+1];
            data[opcount+1]=0;
            //ui->lineEdit->setText(QString::number(data[0]));
            valuecount--;
        }
        else if(op[opcount]=='+')
        {
            opcount++;
            op[opcount]='/';
        }
        else if(op[opcount]=='-')
        {
            opcount++;
            op[opcount]='/';
        }
        else if(op[opcount]=='*')
        {
            data[opcount]*=data[opcount+1];
            data[opcount+1]=0;
            //ui->lineEdit->setText(QString::number(data[0]));
            valuecount--;
            op[opcount]='/';
        }
    }

}

void Dialog::on_btn_equ_clicked()
{
    str=str+"=";
    ui->lineEdit_2->setText(str);
    double res=0.0;
    if(opcount==0)
    {
        if(op[opcount]=='+')
        {
            res=data[0]+data[1];
        }
        else if(op[opcount]=='-')
        {
            res=data[0]-data[1];
        }
        else if(op[opcount]=='*')
        {
            res=data[0]*data[1];
        }
        else if(op[opcount]=='/')
        {
            res=data[0]/data[1];
        }
    }
    else if(opcount==1)
    {
        if(op[opcount-1]=='+'&&op[opcount]=='*')
        {
            res=data[0]+data[1]*data[2];
        }
        else if(op[opcount-1]=='+'&&op[opcount]=='/')
        {
            res=data[0]+data[1]/data[2];
        }
        else if(op[opcount-1]=='-'&&op[opcount]=='*')
        {
            res=data[0]-data[1]*data[2];
        }
        else if(op[opcount-1]=='-'&&op[opcount]=='/')
        {
            res=data[0]-data[1]/data[2];
        }
    }
    QString tem;
    tem=QString::number(res);
    ui->lineEdit->setText(tem);
    str=str+tem;
    ui->lineEdit_2->setText(str);
    str="";
    memset(data,0,sizeof data);
    opcount=0;
    valuecount=0;
}

void Dialog::on_btn_res_clicked()
{
    str="";
    memset(data,0,sizeof data);
    opcount=0;
    valuecount=0;
    ui->lineEdit_2->setText(str);
    ui->lineEdit->setText("0");
}

3.main.cpp

#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}

调试结果图:

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烊萌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值