代码
最下方,有图片上的所有代码
Calculator.h:
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class Calculator; }
QT_END_NAMESPACE
class Calculator : public QMainWindow
{
Q_OBJECT
public:
Calculator(QWidget *parent = nullptr);
~Calculator();
private:
Ui::Calculator *ui;
private slots:
void NumPressed();
void MathButtonPressed();
void EqualButton();
void ChangeNumberSign();
};
#endif // CALCULATOR_H
Calculator.cpp:
#include "calculator.h"
#include "ui_calculator.h"
double calcVal = 0.0;
bool divTrigger = false;
bool multTrigger = false;
bool addTrigger = false;
bool subTrigger = false;
Calculator::Calculator(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::Calculator)
{
ui->setupUi(this);
ui->Display->setText(QString::number(calcVal));
QPushButton *numButtons[10];
for(int i=0;i<10;i++){
QString buttonName = "Button" + QString::number((i));
numButtons[i] = Calculator::findChild<QPushButton *>(buttonName);
connect(numButtons[i],SIGNAL(released()),this,SLOT(NumPressed()));
}
connect(ui->Add,SIGNAL(released()),this,SLOT(MathButtonPressed()));
connect(ui->Subtract,SIGNAL(released()),this,SLOT(MathButtonPressed()));
connect(ui->Multiply,SIGNAL(released()),this,SLOT(MathButtonPressed()));
connect(ui->Divide,SIGNAL(released()),this,SLOT(MathButtonPressed()));
connect(ui->Equals,SIGNAL(released()),this,SLOT(EqualButton()));
connect(ui->ChangeSign,SIGNAL(released()),this,SLOT(ChangeNumberSign()));
}
Calculator::~Calculator()
{
delete ui;
}
void Calculator::NumPressed()
{
QPushButton *button = (QPushButton *)sender();
QString butval = button->text();
QString displayVal = ui->Display->text();
if((displayVal.toDouble() == 0)||(displayVal.toDouble() == 0.0)){
ui->Display->setText(butval);
}
else{
QString newVal = displayVal+butval;
double dblNewVal = newVal.toDouble();
ui->Display->setText(QString::number(dblNewVal,'g',16));
}
}
void Calculator::MathButtonPressed()
{
divTrigger = false;
multTrigger = false;
addTrigger = false;
subTrigger = false;
QString displayVal = ui->Display->text();
calcVal = displayVal.toDouble();
QPushButton *button = (QPushButton *)sender();
QString butVal = button->text();
if(QString::compare(butVal,"/",Qt::CaseInsensitive) == 0){
divTrigger = true;
}else if(QString::compare(butVal,"*",Qt::CaseInsensitive) == 0){
multTrigger = true;
}else if(QString::compare(butVal,"+",Qt::CaseInsensitive) == 0){
addTrigger = true;
}else if(QString::compare(butVal,"-",Qt::CaseInsensitive) == 0){
subTrigger = true;
}
ui->Display->setText("");
}
void Calculator::EqualButton()
{
double solution = 0.0;
QString displayVal = ui->Display->text();
double dblDisplayVal = displayVal.toDouble();
if(addTrigger || subTrigger || multTrigger || divTrigger){
if(addTrigger){
solution = calcVal + dblDisplayVal;
}else if(subTrigger){
solution = calcVal - dblDisplayVal;
}else if(multTrigger){
solution = calcVal * dblDisplayVal;
}else if(divTrigger){
solution = calcVal / dblDisplayVal;
}
}
ui->Display->setText(QString::number(solution));
}
void Calculator::ChangeNumberSign()
{
QString displayVal = ui->Display->text();
QRegExp reg("[-]?[0-9.]*");
if(reg.exactMatch(displayVal)){
double dblDisplayVal = displayVal.toDouble();
double dblDisplayValSign = -1*dblDisplayVal;
ui->Display->setText(QString::number(dblDisplayValSign));
}
}