【Qt】实现一个计算器

本文详细介绍了如何使用Qt框架创建一个简单的计算器应用。通过Qt的信号与槽机制,实现了数字输入、数学运算符选择、等号按钮触发计算以及数字正负号切换等功能。代码包括了`Calculator.h`和`Calculator.cpp`两个文件,展示了事件处理和UI交互的实现过程。
摘要由CSDN通过智能技术生成

Qt实现的简单计算器

Qt实现简易计算器

QT-简易计算器实现(详解)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码

最下方,有图片上的所有代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Calculator.h:

#ifndef CALCULATOR_H
#define CALCULATOR_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class Calculator; }
QT_END_NAMESPACE

class Calculator : public QMainWindow
{
    Q_OBJECT

public:
    Calculator(QWidget *parent = nullptr);
    ~Calculator();

private:
    Ui::Calculator *ui;
private slots:
    void NumPressed();
    void MathButtonPressed();
    void EqualButton();
    void ChangeNumberSign();

};
#endif // CALCULATOR_H

Calculator.cpp:

#include "calculator.h"
#include "ui_calculator.h"

double calcVal = 0.0;
bool divTrigger = false;
bool multTrigger = false;
bool addTrigger = false;
bool subTrigger = false;

Calculator::Calculator(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Calculator)
{
    ui->setupUi(this);
    ui->Display->setText(QString::number(calcVal));
    QPushButton *numButtons[10];
    for(int i=0;i<10;i++){
        QString buttonName = "Button" + QString::number((i));
        numButtons[i] = Calculator::findChild<QPushButton *>(buttonName);
        connect(numButtons[i],SIGNAL(released()),this,SLOT(NumPressed()));


    }
    connect(ui->Add,SIGNAL(released()),this,SLOT(MathButtonPressed()));
    connect(ui->Subtract,SIGNAL(released()),this,SLOT(MathButtonPressed()));
    connect(ui->Multiply,SIGNAL(released()),this,SLOT(MathButtonPressed()));
    connect(ui->Divide,SIGNAL(released()),this,SLOT(MathButtonPressed()));
    connect(ui->Equals,SIGNAL(released()),this,SLOT(EqualButton()));
    connect(ui->ChangeSign,SIGNAL(released()),this,SLOT(ChangeNumberSign()));

}

Calculator::~Calculator()
{
    delete ui;
}

void Calculator::NumPressed()
{
    QPushButton *button = (QPushButton *)sender();
    QString butval = button->text();
    QString displayVal = ui->Display->text();
    if((displayVal.toDouble() == 0)||(displayVal.toDouble() == 0.0)){
        ui->Display->setText(butval);
    }
    else{
        QString newVal = displayVal+butval;
        double dblNewVal = newVal.toDouble();
        ui->Display->setText(QString::number(dblNewVal,'g',16));
    }
}

void Calculator::MathButtonPressed()
{
    divTrigger = false;
    multTrigger = false;
    addTrigger = false;
    subTrigger = false;
    QString displayVal = ui->Display->text();
    calcVal = displayVal.toDouble();
    QPushButton *button = (QPushButton *)sender();
    QString butVal = button->text();
    if(QString::compare(butVal,"/",Qt::CaseInsensitive) == 0){
        divTrigger = true;
    }else if(QString::compare(butVal,"*",Qt::CaseInsensitive) == 0){
        multTrigger = true;
    }else if(QString::compare(butVal,"+",Qt::CaseInsensitive) == 0){
        addTrigger = true;
    }else if(QString::compare(butVal,"-",Qt::CaseInsensitive) == 0){
        subTrigger = true;
    }
    ui->Display->setText("");


}

void Calculator::EqualButton()
{
    double solution = 0.0;
    QString displayVal = ui->Display->text();
    double dblDisplayVal = displayVal.toDouble();
    if(addTrigger || subTrigger || multTrigger || divTrigger){
        if(addTrigger){
            solution = calcVal + dblDisplayVal;
        }else if(subTrigger){
            solution = calcVal - dblDisplayVal;
        }else if(multTrigger){
            solution = calcVal * dblDisplayVal;
        }else if(divTrigger){
            solution = calcVal / dblDisplayVal;
        }
    }
    ui->Display->setText(QString::number(solution));
}

void Calculator::ChangeNumberSign()
{
    QString displayVal = ui->Display->text();
    QRegExp reg("[-]?[0-9.]*");
    if(reg.exactMatch(displayVal)){
        double dblDisplayVal = displayVal.toDouble();
        double dblDisplayValSign = -1*dblDisplayVal;
        ui->Display->setText(QString::number(dblDisplayValSign));
    }
}

  • 20
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
好的!以下是用QT一个简单的计算器的基本步骤: 1. 打开QT Creator,新建一个QT Widgets Application项目。 2. 在mainwindow.ui界面上拖放QPushButton、QLabel和QLineEdit控件,用于输入、输出和计算。 3. 给QPushButton添加点击事件,实现计算功能。点击事件中获取QLineEdit中的输入,进行计算,然后将结果输出到QLabel中。 4. 编译并运行程序,测试计算器功能。 示例代码: mainwindow.h文件: ```c++ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_calculateButton_clicked(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H ``` mainwindow.cpp文件: ```c++ #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_calculateButton_clicked() { // 获取输入 QString input = ui->inputLineEdit->text(); // 计算 QString result = QString::number(eval(input.toStdString().c_str())); // 输出结果 ui->resultLabel->setText(result); } ``` eval函数是一个用于计算表达式的函数,可以使用Qt的QScriptEngine类来实现。该函数的实现可以参考以下示例代码: ```c++ #include <QScriptEngine> double eval(const char* expr) { QScriptEngine engine; QScriptValue result = engine.evaluate(expr); return result.toNumber(); } ``` 这样,一个简单的计算器就完成了。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值