qt编程简单的计算器

QT编程实现简易的计算器

一、 实验目的

1) 熟悉QtCreator的简单操作。 2) 了解Qt程序编写框架。 

3) 了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。 

二、 实验内容 

1) 查看API手册,学习简单的Qt类的使用,如QLineEdit、QPushButton

等。 

2) 用QtCreator创建工程,用Qt编写计算器程序。 3) 对计算器程序进行移植。 

三、 实验步骤 

1. 创建工程 

1) 打开QtCreator,如图1所示。

 选择File->New File or Project,然后在弹出的对话框中选择Other Project->Empty Qt project(如图2所示),然后进入下一步。 

 

 

 

 选择Qt版本,这里选择使用Qt4.7.1,取消对Qt in PATH的选择(如图4所示),然后进入下一步,完成新工程的创建(如图5所示)。

 

 

实现代码

Calcuulator.h代码:

#ifndef CALCULATOR_H

 

#define CALCULATOR_H

 

#include<QApplication>

 

#include<QDialog>

 

#include<QPushButton>

 

#include<QLineEdit>

 

class Calculator:public QDialog

 

{

 

    Q_OBJECT

 

protected:

 

    QLineEdit *lineEditor;

 

    QPushButton *button_0;

 

    QPushButton *button_1;

 

    QPushButton *button_2;

 

    QPushButton *button_3;

 

    QPushButton *button_4;

 

    QPushButton *button_5;

 

    QPushButton *button_6;

 

    QPushButton *button_7;

 

    QPushButton *button_8;

 

    QPushButton *button_9;

 

    QPushButton *button_ce;

 

    QPushButton *button_jia;

 

    QPushButton *button_jian;

 

    QPushButton *button_cheng;

 

    QPushButton *button_chu;

 

    QPushButton *button__;

 

    QPushButton *button_dengyu;

 

   int num1,num2,result;   //

 

   bool zhenghao;      //

 

   int mark;       //

 

   char fuhao;     //

 

   QString S;      //

 

public:

 

    Calculator();

 

private slots:

 

   void button_0_clicked();

 

   void button_1_clicked();

 

   void button_2_clicked();

 

   void button_3_clicked();

 

   void button_4_clicked();

 

   void button_5_clicked();

 

   void button_6_clicked();

 

   void button_7_clicked();

 

   void button_8_clicked();

 

   void button_9_clicked();

 

   void button_ce_clicked();

 

   void button_jia_clicked();

 

   void button_jian_clicked();

 

   void button_cheng_clicked();

 

   void button_chu_clicked();

 

   void button__clicked();

 

   void button_dengyu_clicked();

 

};

 

#endif // CALCULATOR_H

 

 

Calculator.cpp代码:

#include<QLayout>

 

#include<QHBoxLayout>

 

#include<QVBoxLayout>

 

#include<QLineEdit>

 

#include<cmath>

 

#include"calculator.h"

 

Calculator::Calculator()

 

{

 

   num1=0;

 

   num2=0;

 

   result=0;

 

   zhenghao=true;

 

   mark=1;

 

   lineEditor=new QLineEdit("0");

 

    S="";

 

   button_0=new QPushButton("0");

 

   button_1=new QPushButton("1");

 

   button_2=new QPushButton("2");

 

   button_3=new QPushButton("3");

 

   button_4=new QPushButton("4");

 

   button_5=new QPushButton("5");

 

   button_6=new QPushButton("6");

 

   button_7=new QPushButton("7");

 

   button_8=new QPushButton("8");

 

   button_9=new QPushButton("9");

 

   button_ce=new QPushButton("CE");

 

   button_cheng=new QPushButton("*");

 

   button_jia=new QPushButton("+");

 

   button_jian=new QPushButton("-");

 

   button_chu=new QPushButton("/");

 

   button__=new QPushButton("+/-");

 

   button_dengyu=new QPushButton("=");

 

    QHBoxLayout *Hl1=new QHBoxLayout;

 

    QHBoxLayout *Hl2=new QHBoxLayout;

 

    QHBoxLayout *Hl3=new QHBoxLayout;

 

    QHBoxLayout *Hl4=new QHBoxLayout;

 

    QHBoxLayout *Hl5=new QHBoxLayout;

 

    Hl1->addWidget(lineEditor);

 

    Hl1->addWidget(button_ce);

 

    Hl2->addWidget(button_1);

 

    Hl2->addWidget(button_2);

 

    Hl2->addWidget(button_3);

 

    Hl2->addWidget(button_jia);

 

    Hl3->addWidget(button_4);

 

    Hl3->addWidget(button_5);

 

    Hl3->addWidget(button_6);

 

    Hl3->addWidget(button_jian);

 

    Hl4->addWidget(button_7);

 

    Hl4->addWidget(button_8);

 

    Hl4->addWidget(button_9);

 

    Hl4->addWidget(button_cheng);

 

    Hl5->addWidget(button__);

 

    Hl5->addWidget(button_0);

 

    Hl5->addWidget(button_dengyu);

 

    Hl5->addWidget(button_chu);

 

    QVBoxLayout *V1=new QVBoxLayout;

 

    V1->addLayout(Hl1);

 

    V1->addLayout(Hl2);

 

    V1->addLayout(Hl3);

 

    V1->addLayout(Hl4);

 

    V1->addLayout(Hl5);

 

   connect(button_0,SIGNAL(clicked()),this,SLOT(button_0_clicked()));

 

   connect(button_1,SIGNAL(clicked()),this,SLOT(button_1_clicked()));

 

   connect(button_2,SIGNAL(clicked()),this,SLOT(button_2_clicked()));

 

   connect(button_3,SIGNAL(clicked()),this,SLOT(button_3_clicked()));

 

   connect(button_4,SIGNAL(clicked()),this,SLOT(button_4_clicked()));

 

   connect(button_5,SIGNAL(clicked()),this,SLOT(button_5_clicked()));

 

   connect(button_6,SIGNAL(clicked()),this,SLOT(button_6_clicked()));

 

   connect(button_7,SIGNAL(clicked()),this,SLOT(button_7_clicked()));

 

   connect(button_8,SIGNAL(clicked()),this,SLOT(button_8_clicked()));

 

   connect(button_9,SIGNAL(clicked()),this,SLOT(button_9_clicked()));

 

   connect(button_jia,SIGNAL(clicked()),this,SLOT(button_jia_clicked()));

 

   connect(button_jian,SIGNAL(clicked()),this,SLOT(button_jian_clicked()));

 

   connect(button_cheng,SIGNAL(clicked()),this,SLOT(button_cheng_clicked()));

 

   connect(button_chu,SIGNAL(clicked()),this,SLOT(button_chu_clicked()));

 

   connect(button_dengyu,SIGNAL(clicked()),this,SLOT(button_dengyu_clicked()));

 

   connect(button_ce,SIGNAL(clicked()),this,SLOT(button_ce_clicked()));

 

   connect(button__,SIGNAL(clicked()),this,SLOT(button__clicked()));

 

   setLayout(V1);

 

}

 

void Calculator::button_0_clicked()

 

{

 

    S+="0";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

        num1=num1*10+0;

 

   }else{

 

       num2=num2*10;

 

    }

 

}

 

void Calculator::button_1_clicked(){

 

    S+="1";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

           num1=num1*10+1;

 

       }else{

 

           num1=num1*10-1;

 

       }

 

   }else{

 

       if(zhenghao){

 

           num2=num2*10+1;

 

       }else{

 

           num2=num2*10-1;

 

       }

 

    }

 

}

 

void Calculator::button_2_clicked(){

 

    S+="2";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

           num1=num1*10+2;

 

       }else{

 

           num1=num1*10-2;

 

       }

 

   }else{

 

       if(zhenghao){

 

           num2=num2*10+2;

 

       }else{

 

           num2=num2*10-2;

 

       }

 

    }

 

}

 

void Calculator::button_3_clicked(){

 

    S+="3";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

           num1=num1*10+3;

 

       }else{

 

           num1=num1*10-3;

 

       }

 

   }else{

 

       if(zhenghao){

 

           num2=num2*10+3;

 

       }else{

 

           num2=num2*10-3;

 

       }

 

    }

 

}

 

void Calculator::button_4_clicked(){

 

    S+="4";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

           num1=num1*10+4;

 

       }else{

 

           num1=num1*10-4;

 

       }

 

   }else{

 

       if(zhenghao){

 

           num2=num2*10+4;

 

       }else{

 

           num2=num2*10-4;

 

       }

 

    }

 

}

 

void Calculator::button_5_clicked(){

 

    S+="5";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

            num1=num1*10+5;

 

       }else{

 

           num1=num1*10-5;

 

       }

 

   }else{

 

       if(zhenghao){

 

           num2=num2*10+5;

 

       }else{

 

           num2=num2*10-5;

 

       }

 

    }

 

}

 

void Calculator::button_6_clicked(){

 

    S+="6";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

           num1=num1*10+6;

 

       }else{

 

           num1=num1*10-6;

 

       }

 

   }else{

 

       if(zhenghao){

 

           num2=num2*10+6;

 

       }else{

 

           num2=num2*10-6;

 

       }

 

    }

 

}

 

void Calculator::button_7_clicked(){

 

    S+="7";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

           num1=num1*10+7;

 

       }else{

 

           num1=num1*10-7;

 

       }

 

   }else{

 

        if(zhenghao){

 

           num2=num2*10+7;

 

       }else{

 

           num2=num2*10-7;

 

       }

 

    }

 

}

 

void Calculator::button_8_clicked(){

 

    S+="8";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

           num1=num1*10+8;

 

       }else{

 

           num1=num1*10-8;

 

       }

 

   }else{

 

       if(zhenghao){

 

           num2=num2*10+8;

 

       }else{

 

           num2=num2*10-8;

 

       }

 

    }

 

}

 

void Calculator::button_9_clicked(){

 

    S+="9";

 

   lineEditor->setText(S);

 

   if(mark==1){

 

       if(zhenghao){

 

           num1=num1*10+9;

 

       }else{

 

           num1=num1*10-9;

 

       }

 

   }else{

 

       if(zhenghao){

 

           num2=num2*10+9;

 

       }else{

 

           num2=num2*10-9;

 

        }

 

    }

 

}

 

void Calculator::button_jia_clicked(){

 

    S+="+";

 

    lineEditor->setText(S);

 

   zhenghao=true;

 

   fuhao='+';

 

   mark=2;

 

}

 

void Calculator::button_jian_clicked(){

 

    S+="-";

 

    lineEditor->setText(S);

 

   zhenghao=true;

 

   fuhao='-';

 

   mark=2;

 

}

 

void Calculator::button_cheng_clicked(){

 

    S+="*";

 

    lineEditor->setText(S);

 

   zhenghao=true;

 

   fuhao='*';

 

   mark=2;

 

}

 

void Calculator::button_chu_clicked(){

 

    S+="/";

 

    lineEditor->setText(S);

 

    zhenghao=true;

 

   fuhao='/';

 

   mark=2;

 

}

 

void Calculator::button__clicked(){

 

    S+="-";

 

    lineEditor->setText(S);

 

   zhenghao=false;

 

}

 

void Calculator::button_dengyu_clicked(){

 

    S+="=";

 

//    lineEditor->setText(S);

 

    switch(fuhao){

 

    case '+':result=num1+num2;break;

 

    case '-':result=num1-num2;break;

 

    case '*':result=num1*num2;break;

 

    case '/':if(num2)result=num1/num2;break;

 

    }

 

    int i=0;

 

    int result1=result;

 

    while(result1){

 

        i++;

 

        result1/=10;

 

    }

 

    for(;i;i--){

 

         S+=(result/(int)pow(10,i-1)+'0');

 

        result%=(int)pow(10,i-1);

 

    }

 

    lineEditor->setText(S);

 

    zhenghao=true;

 

    num1=num2=0;

 

    mark=1;

 

     S="";

 

}

 

void Calculator::button_ce_clicked()

 

{

 

   zhenghao=false;

 

    S="";

 

   lineEditor->setText("0");

 

   num1=num2=0;

 

   mark=1;

 

}

 

 

 

Main代码:

#include"calculator.h"

 

int main(int argc,char *argv[])

 

{

 

    QApplication app(argc,argv);

 

    Calculator cal;

 

   cal.show();

 

   return app.exec();

 

}

 

运行结果

 

 四、总结

通过计算器设计,学到了利用Qt设计简单窗口应用程序的的方法,初步了解了使用QT工具编写窗口程序的新颖,了解了槽和信号等基本知识,学会了如何使用新工具(Qt)帮助程序开发。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值