计算器
头文件
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include<QWidget>
#include<QDialog>
#include<QPushButton>
#include<QLineEdit>
class calculator:public QWidget
{
Q_OBJECT
public:
calculator(QWidget *parent = 0);
char operate;
QString input1;
QString input2;
private:
QLineEdit*operateEdit;
QPushButton*zeroButton;
QPushButton*oneButton;
QPushButton*twoButton;
QPushButton*threeButton;
QPushButton*fourButton;
QPushButton*fiveButton;
QPushButton*sixButton;
QPushButton*sevenButton;
QPushButton*eightButton;
QPushButton*nineButton;
QPushButton*pointButton;
QPushButton*minusButton;
QPushButton*equalButton;
QPushButton*multiplyButton;
QPushButton*addButton;
QPushButton*subtractButton;
QPushButton*divideButton;
QPushButton*modButton;
QPushButton*powerButton;
QPushButton*clearButton;
public slots:
void zeroPress();
void onePress();
void twoPress();
void threePress();
void fourPress();
void fivePress();
void sixPress();
void sevenPress();
void eightPress();
void ninePress();
void minusPress();
void equalPress();
void addPress();
void subtractPress();
void multiplyPress();
void dividePress();
void modPress();
void clearPress();
void powerPress();
void pointPress();
};
#endif // CALCULATOR_H
calculator类和槽
#include"calculator.h"
#include<QGridLayout>
/******************************
* 构造函数
*******************************/
calculator::calculator(QWidget*parent)
:QWidget(parent)
{
operateEdit=new QLineEdit(this); //显示框
operateEdit->setReadOnly(true);
operateEdit->setText(tr("0"));
zeroButton=new QPushButton(tr("0")); //按键
zeroButton->show();
oneButton=new QPushButton(tr("1"));
oneButton->show();
twoButton=new QPushButton(tr("2"));
twoButton->show();
threeButton=new QPushButton(tr("3"));
threeButton->show();
fourButton=new QPushButton(tr("4"));
fourButton->show();
fiveButton=new QPushButton(tr("5"));
fiveButton->show();
sixButton=new QPushButton(tr("6"));
sixButton->show();
sevenButton=new QPushButton(tr("7"));
sevenButton->show();
eightButton= new QPushButton(tr("8"));
eightButton->show();
nineButton=new QPushButton(tr("9"));
nineButton->show();
pointButton=new QPushButton(tr("."));
pointButton->show();
equalButton=new QPushButton(tr("="));
equalButton->show();
addButton=new QPushButton(tr("+"));
addButton->show();
subtractButton=new QPushButton(tr("-"));
subtractButton->show();
minusButton=new QPushButton(tr("+/-"));
minusButton->show();
clearButton=new QPushButton(tr("C"));
clearButton->show();
powerButton=new QPushButton(tr("^"));
powerButton->show();
modButton=new QPushButton(tr("%"));
subtractButton->show();
divideButton=new QPushButton(tr("÷"));
divideButton->show();
multiplyButton=new QPushButton(tr("×"));
multiplyButton->show();
QHBoxLayout *layout1=new QHBoxLayout;
layout1->addWidget(clearButton,Qt::AlignLeft);
layout1->addWidget(powerButton);
layout1->addWidget(modButton);
layout1->addWidget(divideButton);
layout1->addStretch();
QHBoxLayout *layout2=new QHBoxLayout;
layout2->addWidget(sevenButton,Qt::AlignLeft);
layout2->addWidget(eightButton);
layout2->addWidget(nineButton);
layout2->addWidget(multiplyButton);
layout2->addStretch();
QHBoxLayout *layout3=new QHBoxLayout;
layout3->addWidget(fourButton,Qt::AlignLeft);
layout3->addWidget(fiveButton);
layout3->addWidget(sixButton);
layout3->addWidget(subtractButton);
layout3->addStretch();
QHBoxLayout *layout4=new QHBoxLayout;
layout4->addWidget(oneButton,Qt::AlignLeft);
layout4->addWidget(twoButton);
layout4->addWidget(threeButton);
layout4->addWidget(addButton);
layout4->addStretch();
QHBoxLayout *layout5=new QHBoxLayout;
layout5->addWidget(minusButton,Qt::AlignLeft);
layout5->addWidget(zeroButton);
layout5->addWidget(pointButton);
layout5->addWidget(equalButton);
layout5->addStretch();
QGridLayout*mainLayout=new QGridLayout(this);
mainLayout->addWidget(operateEdit,0,0);
mainLayout->addLayout(layout1,1,0);
mainLayout->addLayout(layout2,2,0);
mainLayout->addLayout(layout3,3,0);
mainLayout->addLayout(layout4,4,0);
mainLayout->addLayout(layout5,5,0);
connect(zeroButton,SIGNAL(clicked()),this,SLOT(zeroPress()));
connect(oneButton,SIGNAL(clicked()),this,SLOT(onePress()));
connect(twoButton,SIGNAL(clicked()),this,SLOT(twoPress()));
connect(threeButton,SIGNAL(clicked()),this,SLOT(threePress()));
connect(fourButton,SIGNAL(clicked()),this,SLOT(fourPress()));
connect(fiveButton,SIGNAL(clicked()),this,SLOT(fivePress()));
connect(sixButton,SIGNAL(clicked()),this,SLOT(sixPress()));
connect(sevenButton,SIGNAL(clicked()),this,SLOT(sevenPress()));
connect(eightButton,SIGNAL(clicked()),this,SLOT(eightPress()));
connect(nineButton,SIGNAL(clicked()),this,SLOT(ninePress()));
connect(addButton,SIGNAL(clicked()),this,SLOT(addPress()));
connect(minusButton,SIGNAL(clicked()),this,SLOT(minusPress()));
connect(subtractButton,SIGNAL(clicked()),this,SLOT(subtractPress()));
connect(equalButton,SIGNAL(clicked()),this,SLOT(equalPress()));
connect(pointButton,SIGNAL(clicked()),this,SLOT(pointPress()));
connect(modButton,SIGNAL(clicked()),this,SLOT(modPress()));
connect(multiplyButton,SIGNAL(clicked()),this,SLOT(multiplyPress()));
connect(powerButton,SIGNAL(clicked()),this,SLOT(powerPress()));
connect(clearButton,SIGNAL(clicked()),this,SLOT(clearPress()));
connect(divideButton,SIGNAL(clicked()),this,SLOT(dividePress()));
input1="0";
input2="0";
operate='0';
}
//==========================================================================
//数字
void calculator::zeroPress(){
if(input2.toFloat()==0){
input2="0";
}
else{
input2=operateEdit->text();
input2.append(tr("0"));
}
operateEdit->setText(input2);
}
void calculator::onePress(){
if(input2.toFloat()==0){
input2="1";
}
else{
input2=operateEdit->text();
input2.append(tr("1"));
}
operateEdit->setText(input2);
}
void calculator::twoPress(){
if(input2.toFloat()==0){
input2="2";
}
else{
input2=operateEdit->text();
input2.append(tr("2"));
}
operateEdit->setText(input2);
}
void calculator::threePress(){
if(input2.toFloat()==0){
input2="3";
}
else{
input2=operateEdit->text();
input2.append(tr("3"));
}
operateEdit->setText(input2);
}
void calculator::fourPress(){
if(input2.toFloat()==0){
input2="4";
}
else{
input2=operateEdit->text();
input2.append(tr("4"));
}
operateEdit->setText(input2);
}
void calculator::fivePress(){
if(input2.toFloat()==0){
input2="5";
}
else{
input2=operateEdit->text();
input2.append(tr("5"));
}
operateEdit->setText(input2);
}
void calculator::sixPress(){
if(input2.toFloat()==0){
input2="6";
}
else{
input2=operateEdit->text();
input2.append(tr("6"));
}
operateEdit->setText(input2);
}
void calculator::sevenPress(){
if(input2.toFloat()==0){
input2="7";
}
else{
input2=operateEdit->text();
input2.append(tr("7"));
}
operateEdit->setText(input2);
}
void calculator::eightPress(){
if(input2.toFloat()==0){
input2="8";
}
else{
input2=operateEdit->text();
input2.append(tr("8"));
}
operateEdit->setText(input2);
}
void calculator::ninePress(){
if(input2.toFloat()==0){
input2="9";
}
else{
input2=operateEdit->text();
input2.append(tr("9"));
}
operateEdit->setText(input2);
}
//================================================================
//运算符
void calculator::addPress(){
float n1,n2;
input2=operateEdit->text();
if(input1.toFloat()==0){
input1=input2;
input2="0";
operate='+';
}
else{
n2=input2.toFloat();
n1=input1.toFloat();
switch(operate){
case'+':n1+=n2;break;
case'-':n1-=n2;break;
case'*':n1*=n2;break;
case'/':if(n2==0){
operateEdit->setText(tr("Wrong Input!"));
return;
}
else{
n1/=n2;
}break;
case'^':n1=pow(n1,n2);break;
}
}
}
void calculator::subtractPress(){
float n1,n2;
input2=operateEdit->text();
if(input1.toFloat()==0){
input1=input2;
input2="0";
operate='-';
}
else{
n2=input2.toFloat();
n1=input1.toFloat();
switch(operate){
case'+':n1+=n2;break;
case'-':n1-=n2;break;
case'*':n1*=n2;break;
case'/':if(n2==0){
operateEdit->setText(tr("Wrong Input!"));
return;
}
else{
n1/=n2;
}break;
case'^':n1=pow(n1,n2);break;
}
}
}
void calculator::multiplyPress(){
float n1,n2;
input2=operateEdit->text();
if(input1.toFloat()==0){
input1=input2;
input2="0";
operate='*';
}
else{
n2=input2.toFloat();
n1=input1.toFloat();
switch(operate){
case'+':n1+=n2;break;
case'-':n1-=n2;break;
case'*':n1*=n2;break;
case'/':if(n2==0){
operateEdit->setText(tr("Wrong Input!"));
return;
}
else{
n1/=n2;
}break;
case'^':n1=pow(n1,n2);break;
}
}
}
void calculator::dividePress(){
float n1,n2;
input2=operateEdit->text();
if(input1.toFloat()==0){
input1=input2;
input2="0";
operate='/';
}
else{
n2=input2.toFloat();
n1=input1.toFloat();
switch(operate){
case'+':n1+=n2;break;
case'-':n1-=n2;break;
case'*':n1*=n2;break;
case'/':if(n2==0){
operateEdit->setText(tr("Wrong Input!"));
return;
}
else{
n1/=n2;
}break;
case'^':n1=pow(n1,n2);break;
}
input1=QString::number(n1,'f',2);
input2="0";
operate='/';
operateEdit->setText(input1);
}
}
void calculator::powerPress(){
float n1,n2;
input2=operateEdit->text();
if(input1.toFloat()==0){
input1=input2;
input2="0";
operate='^';
}
else{
n2=input2.toFloat();
n1=input1.toFloat();
switch(operate){
case'+':n1+=n2;break;
case'-':n1-=n2;break;
case'*':n1*=n2;break;
case'/':if(n2==0){
operateEdit->setText(tr("Wrong Input!"));
return;
}
else{
n1/=n2;
}break;
case'^':n1=pow(n1,n2);break;
}
input1=QString::number(n1,'f',2);
input2="0";
operate='^';
operateEdit->setText(input1);
}
}
void calculator::equalPress(){
float n1,n2;
input2=operateEdit->text();
if(input1.toFloat()==0){
input1=input2;
n1=input1.toFloat();
input1=QString::number(n1,'f',2);
input2="0";
operateEdit->setText(input1);
}
else{
n2=input2.toFloat();
n1=input1.toFloat();
switch(operate){
case'+':n1+=n2;break;
case'-':n1-=n2;break;
case'*':n1*=n2;break;
case'/':if(n2==0){
operateEdit->setText(tr("Wrong Input!"));
return;
}
else{
n1/=n2;
}break;
case'^':n1=pow(n1,n2);break;
}
input1=QString::number(n1,'f',2);
input2="0";
operateEdit->setText(input1);
input1="0";
operate='0';
}
}
void calculator::minusPress(){
float n;
input2=operateEdit->text();
n=0-input2.toFloat();
input2=QString::number(n,'f',2);
operateEdit->setText(input2);
}
void calculator::pointPress(){
input2=operateEdit->text();
input2.append(tr("."));
operateEdit->setText(input2);
}
void calculator::modPress(){
float n;
input2=operateEdit->text();
n=input2.toFloat()/100.0;
input2=QString::number(n,'f',2);
operateEdit->setText(input2);
}
void calculator::clearPress(){
input1="0";
input2="0";
operate='0';
operateEdit->setText(input2);
}
main函数
#include<QApplication>
#include<calculator.h>
int main(int argc,char*argv[]){
QApplication a(argc,argv);
calculator *C=new calculator;
C->show();
return a.exec();
}