在文件的构造函数下面加上:
//显示框设置为只读和初始化为0
inputLine = new QLineEdit(this);
inputLine -> setReadOnly(true);
inputLine -> setText(tr("0"));
zeroButton = new QPushButton;
zeroButton -> setText(tr("0"));
oneButton = new QPushButton;
oneButton -> setText(tr("1"));
twoButton = new QPushButton;
twoButton -> setText(tr("2"));
threeButton = new QPushButton;
threeButton -> setText(tr("3"));
fourButton = new QPushButton;
fourButton -> setText(tr("4"));
fiveButton = new QPushButton;
fiveButton -> setText(tr("5"));
sixButton = new QPushButton;
sixButton -> setText(tr("6"));
sevenButton = new QPushButton;
sevenButton -> setText(tr("7"));
eightButton = new QPushButton;
eightButton -> setText(tr("8"));
nineButton = new QPushButton;
nineButton -> setText(tr("9"));
DoublezeroButton = new QPushButton;
DoublezeroButton -> setText(tr("00"));
addButton = new QPushButton; // +
addButton -> setText(tr("+"));
subButton = new QPushButton; // -
subButton -> setText(tr("-"));
divButton = new QPushButton; // /
divButton -> setText(tr("/"));
mulButton = new QPushButton; // *
mulButton -> setText(tr("*"));
equButton = new QPushButton; // 根号
equButton -> setText(tr("根号"));
resultButton = new QPushButton; // =
resultButton -> setText(tr("="));
baifenhaoButton = new QPushButton; // %
baifenhaoButton -> setText(tr("%"));
dianhaoButton = new QPushButton; // .
dianhaoButton -> setText(tr("."));
alarmButton = new QPushButton; // 闹钟
alarmButton -> setText(tr("闹铃"));
calendarButton = new QPushButton; // 农历/公历
calendarButton -> setText(tr("农历/公历"));
CEButton = new QPushButton; // CE
CEButton -> setText(tr("CE"));
ACButton = new QPushButton; // AC
ACButton -> setText(tr("AC"));
dateButton = new QPushButton; // 时间/日期
dateButton -> setText(tr("时间/日期"));
unitButton = new QPushButton; // 单位
unitButton -> setText(tr("单位"));
MCButton = new QPushButton; // MC
MCButton -> setText(tr("MC"));
MRButton = new QPushButton; // MR
MRButton -> setText(tr("MR"));
MPlusButton = new QPushButton; // M-
MPlusButton -> setText(tr("M-/下调"));
MSubButton = new QPushButton; // M+
MSubButton -> setText(tr("M+/上调"));
narrowButton = new QPushButton; // ->
narrowButton -> setText(tr("——》"));
GTButton = new QPushButton; // GT
GTButton -> setText(tr("GT"));
PlusOrMinusButton = new QPushButton;// +/-
PlusOrMinusButton -> setText(tr("+/-"));
OnOrOffButton = new QPushButton; // 电源
OnOrOffButton -> setText(tr("Power"));
myGridLayout = new QGridLayout;
//InputLine 的位置在于0行0列,占据1行6列
myGridLayout -> addWidget(inputLine,0,0,1,6);
myGridLayout -> addWidget(narrowButton,1,0); // ->
myGridLayout -> addWidget(GTButton,1,1); // GT
myGridLayout -> addWidget(PlusOrMinusButton,1,2); // +/-
myGridLayout -> addWidget(OnOrOffButton,1,3,1,2); // 电源
myGridLayout -> addWidget(dateButton,2,0); // 时间/日期
myGridLayout -> addWidget(unitButton,2,1); // 单位
myGridLayout -> addWidget(MCButton,2,2); // MC
myGridLayout -> addWidget(MRButton,2,3); // MR
myGridLayout -> addWidget(MPlusButton,2,4); // M-
myGridLayout -> addWidget(MSubButton,2,5); // M+
myGridLayout -> addWidget(alarmButton,3,0); // 闹钟
myGridLayout -> addWidget(calendarButton,4,0); // 农历/公历
myGridLayout -> addWidget(CEButton,5,0); // CE
myGridLayout -> addWidget(ACButton,6,0); // AC
myGridLayout -> addWidget(zeroButton,6,1);
myGridLayout -> addWidget(oneButton,5,1);
myGridLayout -> addWidget(twoButton,5,2);
myGridLayout -> addWidget(threeButton,5,3);
myGridLayout -> addWidget(fourButton,4,1);
myGridLayout -> addWidget(fiveButton,4,2);
myGridLayout -> addWidget(sixButton,4,3);
myGridLayout -> addWidget(sevenButton,3,1);
myGridLayout -> addWidget(eightButton,3,2);
myGridLayout -> addWidget(nineButton,3,3);
myGridLayout -> addWidget(DoublezeroButton,6,2);
myGridLayout -> addWidget(addButton,5,4,2,1); // +
myGridLayout -> addWidget(subButton,5,5); // -
myGridLayout -> addWidget(divButton,4,5); // /
myGridLayout -> addWidget(mulButton,4,4); // *
myGridLayout -> addWidget(equButton,3,5); // 根号
myGridLayout -> addWidget(resultButton,6,5); // =
myGridLayout -> addWidget(baifenhaoButton,3,4); // %
myGridLayout -> addWidget(dianhaoButton,6,3); // .
#include <Calculator.h>
//操作函数
Calculator::Calculator()
{
//显示框设置为只读和初始化为0
inputLine = new QLineEdit(this);
inputLine -> setReadOnly(true);
inputLine -> setText(tr("0"));
zeroButton = new QPushButton;
zeroButton -> setText(tr("0"));
oneButton = new QPushButton;
oneButton -> setText(tr("1"));
twoButton = new QPushButton;
twoButton -> setText(tr("2"));
threeButton = new QPushButton;
threeButton -> setText(tr("3"));
fourButton = new QPushButton;
fourButton -> setText(tr("4"));
fiveButton = new QPushButton;
fiveButton -> setText(tr("5"));
sixButton = new QPushButton;
sixButton -> setText(tr("6"));
sevenButton = new QPushButton;
sevenButton -> setText(tr("7"));
eightButton = new QPushButton;
eightButton -> setText(tr("8"));
nineButton = new QPushButton;
nineButton -> setText(tr("9"));
DoublezeroButton = new QPushButton;
DoublezeroButton -> setText(tr("00"));
addButton = new QPushButton; // +
addButton -> setText(tr("+"));
subButton = new QPushButton; // -
subButton -> setText(tr("-"));
divButton = new QPushButton; // /
divButton -> setText(tr("/"));
mulButton = new QPushButton; // *
mulButton -> setText(tr("*"));
equButton = new QPushButton; // 根号
equButton -> setText(tr("根号"));
resultButton = new QPushButton; // =
resultButton -> setText(tr("="));
baifenhaoButton = new QPushButton; // %
baifenhaoButton -> setText(tr("%"));
dianhaoButton = new QPushButton; // .
dianhaoButton -> setText(tr("."));
alarmButton = new QPushButton; // 闹钟
alarmButton -> setText(tr("闹铃"));
calendarButton = new QPushButton; // 农历/公历
calendarButton -> setText(tr("农历/公历"));
CEButton = new QPushButton; // CE
CEButton -> setText(tr("CE"));
ACButton = new QPushButton; // AC
ACButton -> setText(tr("AC"));
dateButton = new QPushButton; // 时间/日期
dateButton -> setText(tr("时间/日期"));
unitButton = new QPushButton; // 单位
unitButton -> setText(tr("单位"));
MCButton = new QPushButton; // MC
MCButton -> setText(tr("MC"));
MRButton = new QPushButton; // MR
MRButton -> setText(tr("MR"));
MPlusButton = new QPushButton; // M-
MPlusButton -> setText(tr("M-/下调"));
MSubButton = new QPushButton; // M+
MSubButton -> setText(tr("M+/上调"));
narrowButton = new QPushButton; // ->
narrowButton -> setText(tr("——》"));
GTButton = new QPushButton; // GT
GTButton -> setText(tr("GT"));
PlusOrMinusButton = new QPushButton;// +/-
PlusOrMinusButton -> setText(tr("+/-"));
OnOrOffButton = new QPushButton; // 电源
OnOrOffButton -> setText(tr("Power"));
myGridLayout = new QGridLayout;
//InputLine 的位置在于0行0列,占据1行6列
myGridLayout -> addWidget(inputLine,0,0,1,6);
myGridLayout -> addWidget(narrowButton,1,0); // ->
myGridLayout -> addWidget(GTButton,1,1); // GT
myGridLayout -> addWidget(PlusOrMinusButton,1,2); // +/-
myGridLayout -> addWidget(OnOrOffButton,1,3,1,2); // 电源
myGridLayout -> addWidget(dateButton,2,0); // 时间/日期
myGridLayout -> addWidget(unitButton,2,1); // 单位
myGridLayout -> addWidget(MCButton,2,2); // MC
myGridLayout -> addWidget(MRButton,2,3); // MR
myGridLayout -> addWidget(MPlusButton,2,4); // M-
myGridLayout -> addWidget(MSubButton,2,5); // M+
myGridLayout -> addWidget(alarmButton,3,0); // 闹钟
myGridLayout -> addWidget(calendarButton,4,0); // 农历/公历
myGridLayout -> addWidget(CEButton,5,0); // CE
myGridLayout -> addWidget(ACButton,6,0); // AC
myGridLayout -> addWidget(zeroButton,6,1);
myGridLayout -> addWidget(oneButton,5,1);
myGridLayout -> addWidget(twoButton,5,2);
myGridLayout -> addWidget(threeButton,5,3);
myGridLayout -> addWidget(fourButton,4,1);
myGridLayout -> addWidget(fiveButton,4,2);
myGridLayout -> addWidget(sixButton,4,3);
myGridLayout -> addWidget(sevenButton,3,1);
myGridLayout -> addWidget(eightButton,3,2);
myGridLayout -> addWidget(nineButton,3,3);
myGridLayout -> addWidget(DoublezeroButton,6,2);
myGridLayout -> addWidget(addButton,5,4,2,1); // +
myGridLayout -> addWidget(subButton,5,5); // -
myGridLayout -> addWidget(divButton,4,5); // /
myGridLayout -> addWidget(mulButton,4,4); // *
myGridLayout -> addWidget(equButton,3,5); // 根号
myGridLayout -> addWidget(resultButton,6,5); // =
myGridLayout -> addWidget(baifenhaoButton,3,4); // %
myGridLayout -> addWidget(dianhaoButton,6,3); // .
//addButton -> resize( subButton -> width(),(subButton -> height()) * 2);
// 将每个按钮的click 信号与槽函数连上
QObject::connect(zeroButton,SIGNAL(clicked()),this,SLOT(buttonZeroClicked()));
QObject::connect(oneButton,SIGNAL(clicked()),this,SLOT(buttonOneClicked()));
QObject::connect(twoButton,SIGNAL(clicked()),this,SLOT(buttonTwoClicked()));
QObject::connect(threeButton,SIGNAL(clicked()),this,SLOT(buttonThreeClicked()));
QObject::connect(fourButton,SIGNAL(clicked()),this,SLOT(buttonFourClicked()));
QObject::connect(fiveButton,SIGNAL(clicked()),this,SLOT(buttonFiveClicked()));
QObject::connect(sixButton,SIGNAL(clicked()),this,SLOT(buttonSixClicked()));
QObject::connect(sevenButton,SIGNAL(clicked()),this,SLOT(buttonSevenClicked()));
QObject::connect(eightButton,SIGNAL(clicked()),this,SLOT(buttonEightClicked()));
QObject::connect(nineButton,SIGNAL(clicked()),this,SLOT(buttonNineClicked()));
QObject::connect(DoublezeroButton,SIGNAL(clicked()),this,SLOT(buttonDoubleZeroClicked()));
QObject::connect(addButton,SIGNAL(clicked()),this,SLOT(buttonPlusClicked()));
QObject::connect(subButton,SIGNAL(clicked()),this,SLOT(buttonMinusClicked()));
QObject::connect(mulButton,SIGNAL(clicked()),this,SLOT(buttonMultiplyClicked()));
QObject::connect(divButton,SIGNAL(clicked()),this,SLOT(buttonDivideClicked()));
QObject::connect(equButton,SIGNAL(clicked()),this,SLOT(buttonCXClicked()));
QObject::connect(dianhaoButton,SIGNAL(clicked()),this,SLOT(buttonDecimalClicked()));
QObject::connect(resultButton,SIGNAL(clicked()),this,SLOT(buttonResultClicked()));
QObject::connect(baifenhaoButton,SIGNAL(clicked()),this,SLOT(buttonBaifenhaoClicked()));
QObject::connect(calendarButton,SIGNAL(clicked()),this,SLOT(buttonCenlederClicked()));
QObject::connect(alarmButton,SIGNAL(clicked()),this,SLOT(buttonAlarmClicked()));
QObject::connect(CEButton,SIGNAL(clicked()),this,SLOT(buttonCEClicked()));
QObject::connect(ACButton,SIGNAL(clicked()),this,SLOT(buttonACClicked()));
QObject::connect(dateButton,SIGNAL(clicked()),this,SLOT(buttonDateClicked()));
QObject::connect(unitButton,SIGNAL(clicked()),this,SLOT(buttonDanweiClicked()));
QObject::connect(MCButton,SIGNAL(clicked()),this,SLOT(buttonMCClicked()));
QObject::connect(MRButton,SIGNAL(clicked()),this,SLOT(buttonMRSetClicked()));
QObject::connect(MPlusButton,SIGNAL(clicked()),this,SLOT(buttonMSubClicked()));
QObject::connect(MSubButton,SIGNAL(clicked()),this,SLOT(buttonMPlusClicked()));
//void buttonClearClicked();
QObject::connect(narrowButton,SIGNAL(clicked()),this,SLOT(buttonArrowClicked()));
QObject::connect(GTButton,SIGNAL(clicked()),this,SLOT(buttonGTClicked()));
QObject::connect(PlusOrMinusButton,SIGNAL(clicked()),this,SLOT(buttonPlusOrMinusClicked()));
QObject::connect(OnOrOffButton,SIGNAL(clicked()),this,SLOT(buttonOnOrOffClicked()));
input1 = "0"; //初始都为0
input2 = "0";
op = ' ';//初始化为空格
mainLayout = new QVBoxLayout(this); //这里一定要加this。。。
mainLayout -> addLayout(myGridLayout);
this -> setWindowTitle("Calculator");
this -> show();
}
Calculator::~Calculator()
{
}
//这个函数是计算当前所存在的计算
double Calculator::GetCurrentResult()
{
double paraLeft,paraRight;
QString stackResult;
while(!value.empty() && !operatorValue.empty())
{
paraLeft = value.pop().toDouble();
paraRight = value.pop().toDouble();
char c = operatorValue.pop();
double result = CurrentCalculate(paraLeft,paraRight,c);
stackResult = QString::number(result,'f',3);
value.push(stackResult);
input1 = stackResult;
input2 = "0";
}
return 0;
}
double Calculator::CurrentCalculate(double x, double y, char c)
{
double result;
switch (c)
{
case '+':result = y + x;break;
case '-':result = y - x;break;
case '*':result = y * x;break;
case '/':result = y / x;break;
}
return result;
}
void Calculator::buttonZeroClicked()
{
if(input2 == "0")
;
else
{
input2.append("0");
}
inputLine->setText(input2);
}
void Calculator::buttonOneClicked()
{
if(input2 == "0")
input2 = "1";
else
{
input2.append("1");
}
inputLine->setText(input2);
}
void Calculator::buttonTwoClicked()
{
if(input2 == "0")
input2 = "2";
else
{
input2.append("2");
}
inputLine->setText(input2);
}
void Calculator::buttonThreeClicked()
{
if(input2 == "0")
input2 = "3";
else
{
input2.append("3");
}
inputLine->setText(input2);
}
void Calculator::buttonFourClicked()
{
if(input2 == "0")
input2 = "4";
else
{
input2.append("4");
}
inputLine->setText(input2);
}
void Calculator::buttonFiveClicked()
{
if(input2 == "0")
input2 = "5";
else
{
input2.append("5");
}
inputLine->setText(input2);
}
void Calculator::buttonSixClicked()
{
if(input2 == "0")
input2 = "6";
else
{
input2.append("6");
}
inputLine->setText(input2);
}
void Calculator::buttonSevenClicked()
{
if(input2 == "0")
input2 = "7";
else
{
input2.append("7");
}
inputLine->setText(input2);
}
void Calculator::buttonEightClicked()
{
if(input2 == "0")
input2 = "8";
else
{
input2.append("8");
}
inputLine->setText(input2);
}
void Calculator::buttonNineClicked()
{
if(input2 == "0")
input2 = "9";
else
{
input2.append("9");
}
inputLine->setText(input2);
}
void Calculator::buttonDoubleZeroClicked()
{
if(input2 == "0")
;
else
{
input2.append("00");
}
inputLine->setText(input2);
}
void Calculator::buttonPlusClicked() //+
{
double paraLeft,paraRight;//两个操作数
QString stackResult;
if(op == ' ')//表示第一个操作数
{
if(input2 != "0")
{
input1 = input2;
}
else
{
input1 = "0";
}
input2 = "0";
op = '+';
value.push(input1);
operatorValue.push('+');
}
else
{
value.push(input2);
while(!value.empty() && !operatorValue.empty())
{
paraLeft = value.pop().toDouble();
paraRight = value.pop().toDouble();
char c = operatorValue.pop();
double result = CurrentCalculate(paraLeft,paraRight,c);
stackResult = QString::number(result,'f',3);
value.push(stackResult);
input1 = stackResult;
}
operatorValue.push('+');
input2 = "0";
op = '+';
inputLine -> setText(input1);
}
}
void Calculator::buttonMinusClicked()
{
double paraLeft,paraRight;//两个操作数
QString stackResult;
if(op == ' ')//表示第一个操作数
{
if(input2 != "0")
input1 = input2;
else
input1 = "0";
input2 = "0";
op = '-';
value.push(input1);
operatorValue.push('-');
}
else
{
value.push(input2);
while(!value.empty() && !operatorValue.empty())
{
paraLeft = value.pop().toDouble();
paraRight = value.pop().toDouble();
char c = operatorValue.pop();
double result = CurrentCalculate(paraLeft,paraRight,c);
stackResult = QString::number(result,'f',3);
value.push(stackResult);
input1 = stackResult;
}
operatorValue.push('-');
input2 = "0";
op = '-';
inputLine -> setText(input1);
}
}
void Calculator::buttonMultiplyClicked()
{
if(op == ' ')//表示第一个操作数
{
input1 = input2;
input2 = "0";
op = '*';
value.push(input1);
operatorValue.push('*');
}
else
{
value.push(input2);
operatorValue.push('*');
input2 = "0";
}
}
void Calculator::buttonDivideClicked()
{
if(op == ' ')//表示第一个操作数
{
input1 = input2;
input2 = "0";
op = '/';
value.push(input1);
operatorValue.push('/');
}
else
{
value.push(input2);
operatorValue.push('/');
input2 = "0";
}
}
void Calculator::buttonCXClicked()
{
}
void Calculator::buttonDecimalClicked()
{
//如果input2中不包含.
if(!input2.contains("."))
input2.append(".");
inputLine->setText(input2);
}
void Calculator::buttonResultClicked()
{
value.push(input2);
double paraLeft,paraRight;//两个操作数
QString stackResult;
if(op == ' ')//表示第一个操作数
{
;// Do nothing
}
else
{
while(!value.empty() && !operatorValue.empty())
{
paraLeft = value.pop().toDouble();
paraRight = value.pop().toDouble();
char c = operatorValue.pop();
double result = CurrentCalculate(paraLeft,paraRight,c);
stackResult = QString::number(result,'f',3);
value.push(stackResult);
}
inputLine -> setText(stackResult);
input2 = stackResult;
op = ' ';
}
}
void Calculator::buttonBaifenhaoClicked()
{
input1 = "0";
input2 = "0";
value.clear();
operatorValue.clear();
inputLine->setText(input1);
}
void Calculator::buttonCenlederClicked()
{
input1 = input2 = "0";//点击日期,则返回
QDate date = QDate::currentDate();
QString strDate = date.toString();
inputLine -> setText(strDate);
}
void Calculator::buttonAlarmClicked()
{
}
void Calculator::buttonCEClicked()
{
}
void Calculator::buttonACClicked()
{
}
void Calculator::buttonDateClicked()
{
input1 = input2 = "0";//点击日期,则返回
QDateTime time = QDateTime::currentDateTime();//获取现在时间
QString str = time.toString("yyyy-MM-dd hh:mm:ss ddd"); //设置显示格式
inputLine -> setText(str);
}
void Calculator::buttonDanweiClicked()
{
}
void Calculator::buttonMCClicked()
{
}
void Calculator::buttonMRSetClicked()
{
}
void Calculator::buttonMSubClicked()
{
}
void Calculator::buttonMPlusClicked()
{
}
void Calculator::buttonArrowClicked()
{
input1 = "0";
input2 = "0";
value.clear();
operatorValue.clear();
inputLine->setText(input1);
}
void Calculator::buttonGTClicked()
{
}
void Calculator::buttonPlusOrMinusClicked()
{
double paraRight = input2.toDouble();
if( paraRight != 0)
paraRight *= ( -1 );
input2 = QString::number(paraRight,'f',3);
inputLine -> setText(input2);
}
void Calculator::buttonOnOrOffClicked()
{
close();
}