1. 程式人生 > 實用技巧 >Qt實現一個簡單的計算器

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

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

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