1-4-计算器实现思路

1-7-计算器实现思路

在这里插入图片描述

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

    QString a;//字符串
    QStringList b;//字符串列表

public:
    int8_t flag;
//处理单击求值(槽:专门处理信号的特殊函数)
private slots:
    void doProcessClick_btn1(bool);
    void doProcessClick_btn2(bool);
    void doProcessClick_btn3(bool);
    void doProcessClick_btn4(bool);
    void doProcessClick_btn5(bool);
    void doProcessClick_btn6(bool);
    void doProcessClick_btn7(bool);
    void doProcessClick_btn8(bool);
    void doProcessClick_btn9(bool);
    void doProcessClick_btn0(bool);
    void doprocessClick_btn_add(bool);
    void doprocessClick_btn_sub(bool);
    void doprocessClick_btn_mul(bool);
    void doprocessClick_btn_div(bool);
    void doProcessClick_btn_equal(bool);

    void doProcessClick_btn_c(bool);
    void doProcessClick_btn_dot(bool);
    void doProcessClick_btn_decrease(bool);
    void doProcessClick_btn_insert(bool);
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    flag = 0;
    a.clear();//清空a
    b.clear();//清空b
    /*绑定信号和槽*/
    //数字
    QObject::connect(ui->btn_1,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn1(bool)));
    QObject::connect(ui->btn_2,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn2(bool)));
    QObject::connect(ui->btn_3,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn3(bool)));
    QObject::connect(ui->btn_4,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn4(bool)));
    QObject::connect(ui->btn_5,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn5(bool)));
    QObject::connect(ui->btn_6,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn6(bool)));
    QObject::connect(ui->btn_7,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn7(bool)));
    QObject::connect(ui->btn_8,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn8(bool)));
    QObject::connect(ui->btn_9,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn9(bool)));
    QObject::connect(ui->btn_0,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn0(bool)));
    //+ - * / =
    QObject::connect(ui->btn_add,SIGNAL(clicked(bool)),this,SLOT(doprocessClick_btn_add(bool)));
    QObject::connect(ui->btn_sub,SIGNAL(clicked(bool)),this,SLOT(doprocessClick_btn_sub(bool)));
    QObject::connect(ui->btn_mul,SIGNAL(clicked(bool)),this,SLOT(doprocessClick_btn_mul(bool)));
    QObject::connect(ui->btn_division,SIGNAL(clicked(bool)),this,SLOT(doprocessClick_btn_div(bool)));
    QObject::connect(ui->btn_equal,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_equal(bool)));

    // c . <- +/-
    QObject::connect(ui->btn_c,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_c(bool)));
    QObject::connect(ui->btn_dot,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_dot(bool)));
    QObject::connect(ui->btn_decrease,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_decrease(bool)));
    QObject::connect(ui->btn_insert,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_insert(bool)));
}

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

void Widget::doProcessClick_btn1(bool){
    a+="1";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn2(bool){
    a+="2";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn3(bool){
    a+="3";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn4(bool){
    a+="4";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn5(bool){
    a+="5";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn6(bool){
    a+="6";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn7(bool){
    a+="7";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn8(bool){
    a+="8";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn9(bool){
    a+="9";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn0(bool){
    a+="0";//字符串追加
    ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn_dot(bool)
{
    a+=".";//字符串追加
    ui->l_show->setText(a);//显示a
}

//插入正负
void Widget::doProcessClick_btn_insert(bool){
    if(flag){
        if(a.left(1)=="+")
        {
            a.remove(0,1);//从0字符开始删除一个字符
            a.insert(0,"-");//从0字符开始 插入‘-’
        }
        else{
           a.insert(0,"-");//从0字符开始 插入‘-’
        }
        flag =~flag;
    }
    else {
        if(a.left(1) == "-")
        {
            a.remove(0,1);//从0字符开始删除一个字符
            a.insert(0,"+");//从0字符开始 插入‘-’
        }
        else {
          a.insert(0,"+");//从[0] 插入‘-’
        }
        flag =~flag;
    }
    ui->l_show->setText(a);
}
//从倒数开始剔除一位
void Widget::doProcessClick_btn_decrease(bool)
{
    a.chop(1);
    ui->l_show->setText(a);
}
//清除
void Widget::doProcessClick_btn_c(bool){
    a.clear();
    b.clear();
    ui->l_show->setText(a);
}

//加
void Widget::doprocessClick_btn_add(bool){
   b.insert(0,a);//字符串a中插入第0位
   a.clear();//清空
   b.insert(1,"+");//字符串b,插入+
   ui->l_show->setText(a);//显示a
}
//减
void Widget::doprocessClick_btn_sub(bool)
{
   b.insert(0,a);//字符串a中插入第0位
   a.clear();//清空
   b.insert(1,"-");//字符串b,插入+
   ui->l_show->setText(a);//显示a
}

//乘
void Widget::doprocessClick_btn_mul(bool){
   b.insert(0,a);//字符串a中插入第0位
   a.clear();//清空
   b.insert(1,"*");//字符串b,插入*
   ui->l_show->setText(a);//显示a
}
//除
void Widget::doprocessClick_btn_div(bool){
   b.insert(0,a);//字符串a中插入第0位
   a.clear();//清空
   b.insert(1,"/");//字符串b,插入/
   ui->l_show->setText(a);//显示a
}

void Widget::doProcessClick_btn_equal(bool){
    if(b.count()==2){//数组有两个元素
        b.insert(2,a);//数组[2]插入数值
        if(b.at(1) == "+"){          
            double v3 = QString(b.at(0)).toDouble()+QString(b.at(2)).toDouble();
            ui->l_show->setText(QString::number(v3));//强制转换QString类型然后显示
        }
        else if (b.at(1) == "-") {
            double  v3 = QString(b.at(0)).toDouble()-QString(b.at(2)).toDouble();
            ui->l_show->setText(QString::number(v3));//强制转换QString类型然后显示
        }
        else if (b.at(1) == "*") {
            double  v3 = QString(b.at(0)).toDouble()*QString(b.at(2)).toDouble();
            ui->l_show->setText(QString::number(v3));//强制转换QString类型然后显示
        }
        else if (b.at(1) == "/") {
            if(QString(b.at(2)).toInt()!=0){
                double  v3 = QString(b.at(0)).toDouble()/QString(b.at(2)).toDouble();
                ui->l_show->setText(QString::number(v3));//强制转换QString类型然后显示
            }
            else {
                ui->l_show->setText("error");
            }

        }
    }
    else {
        a.clear();
        b.clear();
        ui->l_show->setText(a);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值