QT實現計算器
阿新 • • 發佈:2018-12-09
功能分析:
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();
}
截圖:
總結:
看似簡單的程式,坑還蠻多的,