第一次写计算器

计算器

头文件

#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();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值