博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用QT实现简单的计算器——对字符串的操作
阅读量:3934 次
发布时间:2019-05-23

本文共 8853 字,大约阅读时间需要 29 分钟。

前言:由于之后接触到的东西要用到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 
#include
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 
#include
#include "own.h"/*#include
#include
*/namespace Ui {class calculator;}class calculator : public QMainWindow{ Q_OBJECTpublic: 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 
int main(int argc, char *argv[]){ QApplication a(argc, argv); calculator w; w.show(); return a.exec();}

运行之后的界面

在这里插入图片描述

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

转载地址:http://qyhgn.baihongyu.com/

你可能感兴趣的文章
TAUCS库的编译(vs2010)
查看>>
color vector using in plotting example points and lines between corresponding vertices
查看>>
laplacian,degree,adjacency and oriented incidence matrix, differential and laplacian coordinates
查看>>
mex 里面调用matlab函数
查看>>
CUDA里面GRID, BLOCK 边界检测
查看>>
matlab中cuda编程中分配grid和block dimension的时候的注意事项
查看>>
GPU CUDA and MEX Programming
查看>>
arrayfun用法
查看>>
矩阵积分
查看>>
laplacian matrix
查看>>
cotangent matrix or laplacian mesh operator
查看>>
Minimizing quadratic energies with constant constraints
查看>>
Python-第三方库requests详解
查看>>
暴力破解黄巴登录网站
查看>>
python多线程
查看>>
read selection
查看>>
optimization on macOS
查看>>
Template-Based 3D Model Fitting Using Dual-Domain Relaxation
查看>>
install libfreenect2 on ubuntu 16.04
查看>>
how to use automake to build files
查看>>