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_OBJECTpublic:    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_OBJECTpublic:    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 

如果你感觉文章还不错,记得"点赞关注"

关注我的微信公众号【 加班猿 】能够获取更多内容