用QT实现简单的计算器——对字符串的操作

前言:由于之后接触到的东西要用到QT,装好QT之后决定先在上面写一个小程序——计算器。首先简单学习了一下QT基本操作,布局,信号槽。上网查找了一些QT的操作资料。能力不够,写出来了一个功能不全还花里胡哨的计算器(此处算是自我批评,认真的),看到后面你们就知道了。

一.创建工程:
打开Qt Creator,点击New Project创建工程,照着下面指示做就好了,比较简单。
在这里插入图片描述
填写名称和路径,然后下一步
在这里插入图片描述

在这里插入图片描述
可以自己修改类名在这里插入图片描述

在这里插入图片描述
点击完成,然后点击完成,程序就创建好了。

二.界面设计

双击后缀为.ui的文件,进入设计界面
在这里插入图片描述
这是我设计的计算器界面,绿色部分是2个Label控件,用于显示。其他的都是QPushButton控件,可以点击,我修改了它们的名字,方便之后的操作。例如按钮0:名字改成button_0。当然不改也是可以的
在这里插入图片描述
到这里可以运行一下,可以看到还没有添加功能的界面
在这里插入图片描述
三.代码部分
右击项目,选择添加新文件,C++,C++Class。
然后类名就叫own。
这样可以方便区分代码的各个层面,也是我们应该养成的习惯。
own.h

    #ifndef OWN_H
    #define OWN_H
    #include <Qstring>
    #include <QtMath>
    
    
    class own
    {
    public:
        own();
    
        void set_num1(double num);     //获取这两个数
        void set_num2(double num);
        void set_sign(QString sign);       //获取操作符
        QString result();                 //运算的结果
    
    private:
        double num1;     //定义两个浮点数
        double num2;
        QString sign;     //操作符
    };
    
    #endif // OWN_H

own.cpp

 #include "own.h"

own::own()               //构造函数
{
    this->num1=0;
    this->num2=0;
}

void own::set_num1(double num)
{
    this->num1=num;
}

void own::set_num2(double num)
{
    this->num2=num;
}

void own::set_sign(QString sign)
{
    this->sign=sign;
}

//双目运算符:加减乘除
QString own::result()
{
    double result;
    if(this->sign.length()>1)
        return "ERROR";            //返回字符串,返回值是QString型

    if(this->sign=="+")
    {
        result=num1+num2;
    }
    else if(this->sign=="-")
    {
        result=num1-num2;
    }
    else if(this->sign=="*")
    {
        result=num1*num2;
    }
    else if(this->sign=="÷")
    {
        if(this->num2==0)
            return "ERROR";
        result=num1/num2;
    }
    else
    {
        return QString::number(this->num1);
    }
    return QString::number(result);             //将结果转换成QString型
}

calculator.h

#ifndef CALCULATOR_H
#define CALCULATOR_H

#include <QMainWindow>
#include <QString>
#include "own.h"
/*#include <QPushButton>
#include <QLineEdit>*/

namespace Ui {
class calculator;
}

class calculator : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void on_btn_0_clicked();
    void on_btn_1_clicked();
    void on_btn_2_clicked();
    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();
    void on_btn_delete_clicked();
    void on_btn_point_clicked();

private:
    Ui::calculator *ui;
    QString tmp;      //获取Label_1
    QString all;     //获取Label_2
    own *own1;
};

#endif // CALCULATOR_H

calculator.cpp

#include "calculator.h"
#include "ui_calculator.h"
#include "own.h"

calculator::calculator(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::calculator)
{
    own1=new own;
    ui->setupUi(this);
    //连接信号
    connect(this->ui->button_0,SIGNAL(clicked(bool)),this,SLOT(on_btn_0_clicked()));
    connect(this->ui->button_1,SIGNAL(clicked(bool)),this,SLOT(on_btn_1_clicked()));
    connect(this->ui->button_2,SIGNAL(clicked(bool)),this,SLOT(on_btn_2_clicked()));
    connect(this->ui->button_3,SIGNAL(clicked(bool)),this,SLOT(on_btn_3_clicked()));
    connect(this->ui->button_4,SIGNAL(clicked(bool)),this,SLOT(on_btn_4_clicked()));
    connect(this->ui->button_5,SIGNAL(clicked(bool)),this,SLOT(on_btn_5_clicked()));
    connect(this->ui->button_6,SIGNAL(clicked(bool)),this,SLOT(on_btn_6_clicked()));
    connect(this->ui->button_7,SIGNAL(clicked(bool)),this,SLOT(on_btn_7_clicked()));
    connect(this->ui->button_8,SIGNAL(clicked(bool)),this,SLOT(on_btn_8_clicked()));
    connect(this->ui->button_9,SIGNAL(clicked(bool)),this,SLOT(on_btn_9_clicked()));

    connect(this->ui->button_add,SIGNAL(clicked(bool)),this,SLOT(on_btn_add_clicked()));
    connect(this->ui->button_sub,SIGNAL(clicked(bool)),this,SLOT(on_btn_sub_clicked()));
    connect(this->ui->button_mul,SIGNAL(clicked(bool)),this,SLOT(on_btn_mul_clicked()));
    connect(this->ui->button_div,SIGNAL(clicked(bool)),this,SLOT(on_btn_div_clicked()));
    connect(this->ui->button_equal,SIGNAL(clicked(bool)),this,SLOT(on_btn_equal_clicked()));
    connect(this->ui->button_clear,SIGNAL(clicked(bool)),this,SLOT(on_btn_clear_clicked()));
    connect(this->ui->button_point,SIGNAL(clicked(bool)),this,SLOT(on_btn_point_clicked()));
    connect(this->ui->button_delete,SIGNAL(clicked(bool)),this,SLOT(on_btn_delete_clicked()));
    tmp="";
    all="";
}

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

calculator.cpp绑定所有槽函数

   void calculator::on_btn_0_clicked()
    {
       tmp+=ui->button_0->text();
       this->ui->label->setText(tmp);
       all+="0";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_1_clicked()
    {
       tmp+=ui->button_1->text();
       this->ui->label->setText(tmp);
       all+="1";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_2_clicked()
    {
       tmp+=ui->button_2->text();
       this->ui->label->setText(tmp);
       all+="2";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_3_clicked()
    {
       tmp+=ui->button_3->text();
       this->ui->label->setText(tmp);
       all+="3";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_4_clicked()
    {
       tmp+=ui->button_4->text();
       this->ui->label->setText(tmp);
       all+="4";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_5_clicked()
    {
       tmp+=ui->button_5->text();
       this->ui->label->setText(tmp);
       all+="5";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_6_clicked()
    {
       tmp+=ui->button_6->text();
       this->ui->label->setText(tmp);
       all+="6";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_7_clicked()
    {
       tmp+=ui->button_7->text();
       this->ui->label->setText(tmp);
       all+="7";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_8_clicked()
    {
       tmp+=ui->button_8->text();
       this->ui->label->setText(tmp);
       all+="8";
       this->ui->label_2->setText(all);
    }

接上:

 void calculator::on_btn_9_clicked()
        {
           tmp+=ui->button_9->text();
           this->ui->label->setText(tmp);
           all+="9";
           this->ui->label_2->setText(all);
        }
        
        void calculator::on_btn_point_clicked()
        {
             tmp+=ui->button_point->text();
             this->ui->label->setText(tmp);
             all+=".";
             this->ui->label_2->setText(all);
        }
        
        void calculator::on_btn_add_clicked()
        {
            float num=tmp.toFloat();
            own1->set_num1(num);
            tmp="";
            QString ex=ui->button_add->text();
            own1->set_sign(ex);
            all+="+";
            this->ui->label_2->setText(all);
        }
        
        void calculator::on_btn_sub_clicked()
        {
            float num=tmp.toFloat();
            own1->set_num1(num);
            tmp="";
            QString ex=ui->button_sub->text();
            own1->set_sign(ex);
            all+="-";
            this->ui->label_2->setText(all);
        }
        
        void calculator::on_btn_mul_clicked()
        {
            float num=tmp.toFloat();
            own1->set_num1(num);
            tmp="";
            QString ex=ui->button_mul->text();
            own1->set_sign(ex);
            all+="*";
            this->ui->label_2->setText(all);
        }
        
        void calculator::on_btn_div_clicked()
        {
            float num=tmp.toFloat();
            own1->set_num1(num);
            tmp="";
            QString ex=ui->button_div->text();
            own1->set_sign(ex);
            all+="÷";
            this->ui->label_2->setText(all);
        }
        
        void calculator::on_btn_equal_clicked()
        {
            float num=tmp.toFloat();
            own1->set_num2(num);
            QString res=own1->result();
            ui->label->setText(res);
            tmp=res;          //将计算结果赋值给tmp,可以用结果继续计算
            all+="=";
            this->ui->label_2->setText(all);
        }

接上:

void calculator::on_btn_clear_clicked()    //清空置零
    {
       tmp="";
       ui->label->setText("0");
       all="";
       this->ui->label_2->setText(all);
    }
    
    void calculator::on_btn_delete_clicked()     //删除前一个字符
    {
        tmp=tmp.left(tmp.length()-1);
        this->ui->label->setText(tmp);
        all=all.left(all.length()-1);
        this->ui->label_2->setText(all);
    }

main.cpp

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

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

    return a.exec();
}

运行之后的界面
在这里插入图片描述

后序:由于第一次使用QT做项目,对QT还不是很熟悉,还有很多控件不了解,目前只做出来简单的计算器,还需要插入菜单、跳转事件等功能,还有这段代码最大的缺点是只是对字符串进行了操作,不能区别优先级和括号。后面如果要写功能更多的计算器,要运用到数据结构中的堆栈。下去学习一下之后会再写一个功能完整些的计算器。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值