mainwindow.h
数字0~9和点关联同一个槽函数,+ - * /对应另外一个槽函数
按钮是从ui设计界面拖过来的
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QString>
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots: //声明了私有的槽函数
void fun(); //数字0~9和点关联同一个槽函数
void otherfun(); // + - * /
void on_theback_clicked();//退格
void on_myresult_clicked();//等于号
void on_init0_clicked();//归零
private:
Ui::MainWindow *ui;
double sum = 0;
int flag = 0;//标志位:+ - * / 对应 1 2 3 4
int otherflag = 0;//记录上一次 + - * / 对应 1 2 3 4
int flag1 = 0;//其他标志位
int flag2 = 0;//=标志位
QString temp; //临时存放两次输入的要进行计算的项
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QPushButton>
#include <QLineEdit>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->num0,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num1,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num2,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num3,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num4,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num5,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num6,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num7,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num8,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->num9,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->point,SIGNAL(clicked(bool)),this,SLOT(fun()));
connect(ui->theplus,SIGNAL(clicked(bool)),this,SLOT(otherfun()));
connect(ui->noplus,SIGNAL(clicked(bool)),this,SLOT(otherfun()));
connect(ui->chengfa,SIGNAL(clicked(bool)),this,SLOT(otherfun()));
connect(ui->chufa,SIGNAL(clicked(bool)),this,SLOT(otherfun()));
setWindowTitle(tr("简易计算器"));
ui->lineEdit->setEnabled(false);//设置不可以手动输入
ui->lineEdit_2->setEnabled(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::fun()
{
//获取信号的发送者
QPushButton *p=qobject_cast<QPushButton *>(sender());
ui->lineEdit->setText(ui->lineEdit->text()+p->text());
ui->lineEdit_2->setText(ui->lineEdit_2->text()+p->text());
}
void MainWindow::otherfun()
{
//获取信号的发送者
QPushButton *p=qobject_cast<QPushButton *>(sender());
if(p->text()=="+") //加法
flag=1;
else if(p->text()=="-")
flag=2;
else if(p->text()=="*")
flag=3;
else if(p->text()=="/")
flag=4;
if(flag1 == 0)
{
sum = ui->lineEdit_2->text().toDouble();
QString line;
line.clear(); //清空字符数组line中的内容
ui->lineEdit_2->setText(line);
flag1++;
flag2++;
ui->lineEdit->setText(ui->lineEdit->text()+p->text());
otherflag = flag;
return ;
}
flag1++;
if(flag2 == 0)
{
flag2++;
QString line;
line.clear(); //清空字符数组line中的内容
ui->lineEdit_2->setText(line);
ui->lineEdit->setText(ui->lineEdit->text()+p->text());
otherflag = flag;
return ;
}
flag2++;
temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
if(otherflag == 1) //加法
sum = sum+temp.toDouble(); //将字符转换成浮点型
if(otherflag == 2) //-
sum = sum-temp.toDouble(); //将字符转换成浮点型
if(otherflag == 3) //*
sum = sum*temp.toDouble(); //将字符转换成浮点型
if(otherflag == 4) // /
sum = sum/temp.toDouble(); //将字符转换成浮点型
ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
ui->lineEdit->setText(ui->lineEdit->text()+p->text());
QString line;
line.clear(); //清空字符数组line中的内容
ui->lineEdit_2->setText(line);
otherflag = flag;
}
void MainWindow::on_theback_clicked()//删除
{
int a = ui->lineEdit->text().size() - 1;
if(ui->lineEdit->text().at(a)=='+'||ui->lineEdit->text().at(a)=='-'||ui->lineEdit->text().at(a)=='*'||ui->lineEdit->text().at(a)=='/')
{
qDebug()<<"您最后一次按了操作运算符,无法退格";
return;
}
QString line = ui->lineEdit->text();
line.chop(1);
ui->lineEdit->setText(line);
line = ui->lineEdit_2->text();
line.chop(1);
ui->lineEdit_2->setText(line);
}
void MainWindow::on_myresult_clicked()
{
flag2 = 0;
if(flag == 1)
{
temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
sum = temp.toDouble() + sum; //将字符转换成浮点型
ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
ui->lineEdit->setText(ui->lineEdit->text()+"="+QString::number(sum));
QString line;
line.clear(); //清空字符数组line中的内容
ui->lineEdit_2->setText(line);
}
if(flag == 2)
{
temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
sum = sum-temp.toDouble(); //将字符转换成浮点型
ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
ui->lineEdit->setText(ui->lineEdit->text()+"="+QString::number(sum));
QString line;
line.clear(); //清空字符数组line中的内容
ui->lineEdit_2->setText(line);
}
if(flag == 3)
{
temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
sum = sum * temp.toDouble(); //将字符转换成浮点型
ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
ui->lineEdit->setText(ui->lineEdit->text()+"="+QString::number(sum));
QString line;
line.clear(); //清空字符数组line中的内容
ui->lineEdit_2->setText(line);
}
if(flag == 4)
{
temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
sum = sum / temp.toDouble(); //将字符转换成浮点型
ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
ui->lineEdit->setText(ui->lineEdit->text()+"="+QString::number(sum));
QString line;
line.clear(); //清空字符数组line中的内容
ui->lineEdit_2->setText(line);
}
ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
}
void MainWindow::on_init0_clicked()//归零
{
flag1 = 0;
flag2 = 0;
QString line = ui->lineEdit->text();
line.clear(); //清空字符数组line中的内容
ui->lineEdit->setText(line);
ui->lineEdit_2->setText(line);
sum = 0;
}
效果图:由于未考虑优先级,所以从左往右计算结果等于8
附言:如果有谁看了我这篇博文后发现有bug,可以留言告诉我。