1. 程式人生 > >QT實現計算器

QT實現計算器

功能分析:

                1.實現計算器的+ - * / 基本運算及小數點運算

                2.實現清空和關機

                3.實現多個按鈕公用一個槽函式

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
private slots:
    void on_pushButton_add_clicked();
    void on_pushButton_equal_clicked();
    void on_pushButton_clear_clicked();
    void on_pushButton_close_clicked();
    void on_pushButton_sub_clicked();
    void on_pushButton_multi_clicked();
    void on_pushButton_div_clicked();
    void PushButton_clicked();
    void on_pushButton_13_clicked();

private:
    Ui::Dialog *ui;
    QString opt;
    QString lValue;
    int flags4;
};

#endif // DIALOG_H
#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>
#include <QMessageBox>
#pragma execution_character_set("utf-8")
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    setWindowFlags(Qt::WindowCloseButtonHint);
    QObject::connect(ui->pushButton_1,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));          
    QObject::connect(ui->pushButton_2,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    QObject::connect(ui->pushButton_3,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    QObject::connect(ui->pushButton_4,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    QObject::connect(ui->pushButton_5,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    QObject::connect(ui->pushButton_6,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    QObject::connect(ui->pushButton_7,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    QObject::connect(ui->pushButton_8,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    QObject::connect(ui->pushButton_9,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    QObject::connect(ui->pushButton_zero,SIGNAL(clicked()),\
    this,SLOT(PushButton_clicked()));
    flags4=0;
    flags1=0;
    opt="";
}

Dialog::~Dialog()
{
    delete ui;
}
void Dialog::PushButton_clicked()
{
    QString get=((QPushButton *)this->sender())->text();
    //QString get = this->sender()->objectName();
    //qDebug()<<get; //列印源頭物件名稱
    //qDebug()<<get;
    if(flags4)
    {
       ui->calc_edit->clear();
       flags4=0;
    }
    QString txt=ui->calc_edit->text();
    ui->calc_edit->setText(txt+get);
}
void Dialog::on_pushButton_add_clicked()
{
    if(opt.length()!=0)
    {
       on_pushButton_equal_clicked();
    }
    opt="+";
    lValue=ui->calc_edit->text();
    flags4=1;
}

void Dialog::on_pushButton_equal_clicked()
{
    QString rvalue=ui->calc_edit->text();
    //qDebug()<<lValue;
    if(opt=="+")
    {
        float result=lValue.toFloat()+rvalue.toFloat();
        lValue=QString::number((result));
        ui->calc_edit->setText(QString::number(result));
        opt="";
    }
    else if(opt=="-")
    {
        float result=lValue.toFloat()-rvalue.toFloat();
        lValue=QString::number((result));
        ui->calc_edit->setText(QString::number(result));
        opt="";
    }else if(opt=="*")
    {
        float result=lValue.toFloat()*rvalue.toFloat();
        lValue=QString::number((result));
        ui->calc_edit->setText(QString::number(result));
        opt="";

    }else if(opt=="/")
    {
        if(rvalue.toInt()==0)
        {
            //qDebug()<<"aaaaaaaa";
            QMessageBox::warning(this,tr("警告"),tr("除數不能為0"));
            return ;
        }
        float result=lValue.toFloat()/rvalue.toFloat();
        lValue=QString::number((result));
        ui->calc_edit->setText(QString::number(result));
        opt="";
    }
    
}

void Dialog::on_pushButton_clear_clicked()
{
     ui->calc_edit->clear();
     lValue="";
     opt="";
     flags1=0;
}
void Dialog::on_pushButton_close_clicked()
{
    this->close();
}

void Dialog::on_pushButton_sub_clicked()
{

    if(opt.length()!=0)
    {
       on_pushButton_equal_clicked();
    }
    opt="-";
    lValue=ui->calc_edit->text();
    flags4=1;

}

void Dialog::on_pushButton_multi_clicked()
{
    if(opt.length()!=0)
    {
       on_pushButton_equal_clicked();
    }
    opt="*";
    lValue=ui->calc_edit->text();
    flags4=1;
}

void Dialog::on_pushButton_div_clicked()
{

    if(opt.length()!=0)
    {
       on_pushButton_equal_clicked();
    }
    opt="/";
    lValue=ui->calc_edit->text();
    qDebug()<<lValue;
    flags4=1;
}

void Dialog::on_pushButton_13_clicked()
{

    QString txt=ui->calc_edit->text();
    if(txt==NULL)
    {
        ui->calc_edit->setText("0."+txt);
    }else
    {
        if(txt.indexOf(".")==-1)
        {
           ui->calc_edit->setText(txt+".");
        }
        else
        {
             ui->calc_edit->setText(txt);
        }
    }
}
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.setMinimumSize(241,311);
    w.setMaximumSize(241,311);
    w.show();
    return a.exec();
}

截圖:

       

 總結:

         看似簡單的程式,坑還蠻多的,