Qt實現一個簡單的計算器


Qt實現一個簡單的計算器

作者:hackett
微信公眾號:加班猿

 

一、UI界面版

運行效果:輸入num1和num2選擇+-*/點擊計算即可

UI界面設計:

3個lineEdit(lineEditNum1,lineEditNum2,lineEditSum)

2個PushButton(buttonClear,ButtonCalc)

1個comboBox

1個label

布局:

3個lineEdit和1個comboBox、1個label水平布局

2個PushButton和一個彈簧水平布局

最后整體布局即可

main.cpp

 #include "mainwindow.h"
 #include <QApplication>
 
 int main(int argc, char *argv[])
 {
     QApplication a(argc, argv);
     MainWindow w;
     w.show();
 
     return a.exec();
 }
 

mainwindow.cpp

 #include "mainwindow.h"
 #include "ui_mainwindow.h"
 #include <QDebug>
 #include <QMessageBox>
 
 MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent),
     ui(new Ui::MainWindow)
 {
     ui->setupUi(this);
 }
 
 MainWindow::~MainWindow()
 {
     delete ui;
 }
 
 
 void MainWindow::on_buttonCalc_clicked()
 {
     double num1 = ui->lineEditNum1->text().toDouble();//獲取num1的值
     double num2 = ui->lineEditNum2->text().toDouble();//獲取num2的值
     uint8_t index = ui->comboBox->currentIndex();   //獲取下拉框的下標0 +, 1 - ,2 *, 3 /
     double result = 0.0;
 
     switch (index) {
     case 0:
         result = num1 + num2;
         break;
     case 1:
         result = num1 - num2;
         break;
     case 2:
         result = num1 * num2;
         break;
     case 3:
         if(num2 == 0)
        {
             QMessageBox::about(this,"注意","除數不能為0");
             return;
        }
         result = num1 / num2;
         break;
     default:
         break;
    }
     ui->lineEditSum->setText(QString::number(result));
 }
 
 void MainWindow::on_buttonClear_clicked()
 {
     ui->lineEditNum1->clear();
     ui->lineEditNum2->clear();
     ui->lineEditSum->clear();
 }

mainwindow.h

 #ifndef MAINWINDOW_H
 #define MAINWINDOW_H
 
 #include <QMainWindow>
 
 namespace Ui {
 class MainWindow;
 }
 
 class MainWindow : public QMainWindow
 {
     Q_OBJECT
 
 public:
     explicit MainWindow(QWidget *parent = 0);
     ~MainWindow();
 
 private slots:
 
     void on_buttonCalc_clicked();//計算結果槽函數
 
     void on_buttonClear_clicked();//清除輸入框槽函數
 
 private:
     Ui::MainWindow *ui;
 };
 
 #endif // MAINWINDOW_H
 

二、純代碼版

注:只能兩個數單獨加減乘除,不能連續運算,按‘ = ’重新開始兩個數運算

main.cpp

 #include "calc.h"
 #include <QApplication>
 
 int main(int argc, char *argv[])
 {
     QApplication a(argc, argv);
     Calc w;
     w.show();
 
     return a.exec();
 }

calc.cpp

 #include "calc.h"
 #include <QHBoxLayout>
 #include <QVBoxLayout>
 #include <QLineEdit>
 #include <QSizePolicy>
 #include <QDebug>
 
 Calc::Calc(QWidget *parent) :
     QWidget(parent)
 {
     //獲取字體QFont
     QFont font = this->font();
     font.setPixelSize(30);
     this->setFont(font);
 
     //保存鍵盤值
     QString keys="789-456*123/0.+=";
     QVBoxLayout *vbox = new QVBoxLayout();
 
     QSizePolicy qsPolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     for(int i=0; i<4; i++)
    {
         QHBoxLayout *hbox = new QHBoxLayout();
         for(int j=0; j<4; j++)
        {
             buttons[i*4+j] = new QToolButton(this);
             //設置文本
             buttons[i*4+j]->setText(keys.mid(i*4+j, 1));
             hbox->addWidget(buttons[i*4+j]);
 
             //策略設置
             buttons[i*4+j]->setSizePolicy(qsPolicy);
 
             //把按鈕觸發信號關聯槽函數
             connect(buttons[i*4+j], SIGNAL(clicked(bool)),this, SLOT(buttons_chick()));
        }
         //把水平布局管理器添加到垂直布局管理器中
         vbox->addLayout(hbox);
    }
 
     //創建一個輸入框
     edit = new QLineEdit(this);
     edit->setSizePolicy(qsPolicy);
     edit->setMaximumHeight(60);
     edit->setAlignment(Qt::AlignRight);
 
 
     QVBoxLayout *allVbox = new QVBoxLayout(this);
     allVbox->addWidget(edit);
     allVbox->addLayout(vbox);
 
 
     //初始化
     firstNumber.clear();
     secondNumber.clear();
     calcflag = 0;
 
 }
 Calc::~Calc()
 {
 }
 void Calc::input_data(QString str)
 {
     if(calcflag == 0)
    {
         firstNumber.append(str);
         edit->setText(firstNumber);
    }else
    {
         secondNumber.append(str);
         edit->setText(secondNumber);
    }
 }
 
 void Calc::buttons_chick()
 {
     //通過信號發送者獲取按鈕對象
     QToolButton *button = (QToolButton*)sender();
     //qDebug()
     QString str = button->text();
     QString datastr = ".0123456789";
     QStringList typestr;
     typestr<<"+"<<"-"<<"*"<<"/";
     if(datastr.indexOf(str) >= 0)//獲取按鍵值
    {
         input_data(str);    //輸入數據
    }else if(typestr.indexOf(str)>=0)
    {
         calcflag = typestr.indexOf(str)+1;//獲取運算符號type
    }else //=
    {
         double result = 0.0;
         switch (calcflag) {
         case 1:
             result = firstNumber.toDouble()+secondNumber.toDouble();
             break;
         case 2:
             result = firstNumber.toDouble()-secondNumber.toDouble();
             break;
         case 3:
             result = firstNumber.toDouble()*secondNumber.toDouble();
             break;
         case 4:
             result = firstNumber.toDouble()/secondNumber.toDouble();
             break;
         default:
             break;
        }
         edit->setText(QString::number(result));
         calcflag = 0;
         firstNumber.clear();
         secondNumber.clear();
    }
 }

calc.h

 #ifndef CALC_H
 #define CALC_H
 
 #include <QWidget>
 #include <QToolButton>
 #include <QLineEdit>
 
 class Calc : public QWidget
 {
     Q_OBJECT
 public:
     explicit Calc(QWidget *parent = 0);
     ~Calc();
     void input_data(QString str);
     
 protected slots:
     void buttons_chick();//按鍵槽函數
 
 private:
     
     QToolButton *buttons[16];   //按鈕數組
     QLineEdit *edit;            //輸入框
     QString firstNumber;        //記錄輸入第一個數值
     QString secondNumber;       //記錄輸入第一個數值
     int calcflag;               //1-add, 2-sub, 3-mul, 4-div
 };
 
 #endif // CALC_H
 

如果你覺得文章還不錯,記得"點贊關注"

關注我的微信公眾號【 加班猿 】可以獲取更多內容

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM