QT新手入门程序(计算器程序

QT入门小程序(简单计算器):


1.首先看下运行界面:

界面布局参考这个:点击这里


由于某些键不知道具体的作用是什么,所以就没有实习点击对应的槽函数,(这些键包括GT 单位 MC MR M-/下调 M+/上调 CE 和AC ) -->键 和 % 号键都实现的删除功能(win7 自带计算器 %是删除.模仿 )其余的键 是可以正常使用的。



2.介绍下QT中的布局

     参考:

经常要用到的三个布局部件
  • QHBoxLayout水平布局
  • QVBoxLayout垂直布局
  • QGridLayout 表格布局
QHBoxLayout和QVBoxLayout用法相同
基本:
QHBoxLayout->addWidget(w1);
QVBoxLayout->addWidget(w2);

QGridLayout用法

layout->addWidget(widget,row,column,rowSpan,columnSpan);

layout->addLayout(layout,row,column,rowSpan,columnSpan);
(row,column):控件占据左上角的单元格位置
rowSpan:控件占据的行数
columnSpan:控件占据的列数(不写默认为1)


将布局与主窗体建立联系

layout=new QHBoxLayout(this);  //创建好布局,这里一定要将布局与主窗体建立联系
或者
this->setLayout(layout);

OK,看下本界面的实现代码:
      在.h 文件中定义空间和Layout,在.cpp文件中添加实现。
      .h文件
#ifndef CALCULATOR_H
#define CALCULATOR_H

#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLineEdit>
#include <QDateTime>
#include <QtGui>
#include <QDebug>
#include <QStack>


class Calculator: public QWidget
{
   Q_OBJECT
public:
    Calculator();//计算器构造函数
    ~Calculator();//计算器析构函数
    double GetCurrentResult();
    double CurrentCalculate(double,double,char);

    //下面定义每个按键按下去对应的槽函数
public slots:



    //0 到 9 按键的槽函数和双0 的槽函数
    void buttonZeroClicked();
    void buttonOneClicked();
    void buttonTwoClicked();
    void buttonThreeClicked();
    void buttonFourClicked();
    void buttonFiveClicked();
    void buttonSixClicked();
    void buttonSevenClicked();
    void buttonEightClicked();
    void buttonNineClicked();
    void buttonDoubleZeroClicked();

    //   + - * /  = . 根号  % 对应的槽函数
    void buttonPlusClicked();     //    +对应的槽函数
    void buttonMinusClicked();    //    -对应的槽函数
    void buttonMultiplyClicked(); //    *对应的槽函数
    void buttonDivideClicked();   //    /对应的槽函数
    void buttonCXClicked();       //    跟号对应的槽函数
    void buttonDecimalClicked();  //    点号对应的槽函数
    void buttonResultClicked();   //    =对应的槽函数
    void buttonBaifenhaoClicked();//    %对应的槽函数

    //闹钟,公历/农历 CE  AC 槽函数

    void buttonCenlederClicked();     //    公历/农历对应的槽函数
    void buttonAlarmClicked();    //    闹铃对应的槽函数
    void buttonCEClicked();       //    CE对应的槽函数
    void buttonACClicked();       //    AC对应的槽函数


    //时间/日期 单位 MC  MR设定  M-/下调  M+/上调
    void buttonDateClicked();
    void buttonDanweiClicked();
    void buttonMCClicked();
    void buttonMRSetClicked();
    void buttonMSubClicked();
    void buttonMPlusClicked();

    //void buttonClearClicked();

    // -->  GT +/- 电源  对应的槽函数
    void buttonArrowClicked();
    void buttonGTClicked();
    void buttonPlusOrMinusClicked();
    void buttonOnOrOffClicked();

private:

    //显示框
    QLineEdit *inputLine;

    // 0 - 9 按钮(用数组来表示)以及双0 按钮
    QPushButton* zeroButton;
    QPushButton* oneButton;
    QPushButton* twoButton;
    QPushButton* threeButton;
    QPushButton* fourButton;
    QPushButton* fiveButton;
    QPushButton* sixButton;
    QPushButton* sevenButton;
    QPushButton* eightButton;
    QPushButton* nineButton;
    QPushButton* DoublezeroButton;



    //清除 和 加减乘除 以及 根号 等号 按钮

    QPushButton *addButton;      //  +
    QPushButton *subButton;      //  -
    QPushButton *divButton;      //  /
    QPushButton *mulButton;      //  *
    QPushButton *equButton;      //  根号
    QPushButton *resultButton;   //  =
    QPushButton *baifenhaoButton;//  %
    QPushButton *dianhaoButton;  //  .


    QPushButton *alarmButton;    //  闹钟
    QPushButton *calendarButton; //  农历/公历
    QPushButton *CEButton;       //  CE
    QPushButton *ACButton;       //  AC


    QPushButton *dateButton;     //   时间/日期
    QPushButton *unitButton;     //   单位
    QPushButton *MCButton;       //   MC
    QPushButton *MRButton;       //   MR
    QPushButton *MPlusButton;    //   M-
    QPushButton *MSubButton;     //   M+


    QPushButton *narrowButton;   //   ->
    QPushButton *GTButton;       //   GT
    QPushButton *PlusOrMinusButton;//  +/-
    QPushButton *OnOrOffButton;    // 电源

    //布局
    QGridLayout *myGridLayout;

    QVBoxLayout *mainLayout;


    //计算器的2个运算操作符和运算符 以及结果
    QString input1;
    QString input2;

    QString result;// 记录当前运算的值
    char op;

    QStack<QString> value;
    QStack<char> operatorValue;


};

#endif // CALCULATOR_H

.cpp文件
在文件的构造函数下面加上:
//显示框设置为只读和初始化为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);   //  .



这样就可以构造成上文中的界面,
实现+/-/* //是使用了 QStack来完成的。全部.cpp代码:
#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();
}


main文件:
#include <QApplication>
#include <QTextCodec>
#include <Calculator.h>


int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    //下面这种是解决GT4的乱码问题,但是这种方法在大的程序是不可取的,具体地址看
    //http://forum.ubuntu.org.cn/viewtopic.php?f=162&t=83734
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QApplication::setFont(QFont(QObject::tr("宋体"), 10, QFont::Normal));
    Calculator  my ;


    my.show();
    return app.exec();
}





  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值