前言
这段时间在实习,还是想把自己学到的一些记录下来,第一次接触到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();
}
调试结果图: