使用QT制作一个简单的计算器(不考虑优先级)

mainwindow.h

数字0~9和点关联同一个槽函数,+ - * /对应另外一个槽函数
按钮是从ui设计界面拖过来的

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QString>
#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:  //声明了私有的槽函数

    void fun();  //数字0~9和点关联同一个槽函数

    void otherfun();  // + - * /

    void on_theback_clicked();//退格

    void on_myresult_clicked();//等于号

    void on_init0_clicked();//归零

private:
    Ui::MainWindow *ui;
    double sum = 0;
    int flag = 0;//标志位:+ - * / 对应 1 2 3 4
    int otherflag = 0;//记录上一次 + - * / 对应 1 2 3 4
    int  flag1 = 0;//其他标志位
    int  flag2 = 0;//=标志位
    QString temp; //临时存放两次输入的要进行计算的项
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
#include <QPushButton>
#include <QLineEdit>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->num0,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num1,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num2,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num3,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num4,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num5,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num6,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num7,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num8,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->num9,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->point,SIGNAL(clicked(bool)),this,SLOT(fun()));
    connect(ui->theplus,SIGNAL(clicked(bool)),this,SLOT(otherfun()));
    connect(ui->noplus,SIGNAL(clicked(bool)),this,SLOT(otherfun()));
    connect(ui->chengfa,SIGNAL(clicked(bool)),this,SLOT(otherfun()));
    connect(ui->chufa,SIGNAL(clicked(bool)),this,SLOT(otherfun()));
    setWindowTitle(tr("简易计算器"));

    ui->lineEdit->setEnabled(false);//设置不可以手动输入
    ui->lineEdit_2->setEnabled(false);
}

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

void MainWindow::fun()
{
    //获取信号的发送者
    QPushButton *p=qobject_cast<QPushButton *>(sender());

    ui->lineEdit->setText(ui->lineEdit->text()+p->text());
    ui->lineEdit_2->setText(ui->lineEdit_2->text()+p->text());
}

void MainWindow::otherfun()
{
    //获取信号的发送者
     QPushButton *p=qobject_cast<QPushButton *>(sender());
     if(p->text()=="+") //加法
         flag=1;
     else if(p->text()=="-")
         flag=2;
     else if(p->text()=="*")
         flag=3;
     else if(p->text()=="/")
         flag=4;
     if(flag1 == 0)
     {
         sum = ui->lineEdit_2->text().toDouble();
         QString line;
         line.clear(); //清空字符数组line中的内容
         ui->lineEdit_2->setText(line);
         flag1++;
         flag2++;
         ui->lineEdit->setText(ui->lineEdit->text()+p->text());
         otherflag = flag;
         return ;
     }
     flag1++;
     if(flag2 == 0)
     {
         flag2++;
         QString line;
         line.clear(); //清空字符数组line中的内容
         ui->lineEdit_2->setText(line);
         ui->lineEdit->setText(ui->lineEdit->text()+p->text());
         otherflag = flag;
         return ;
     }
     flag2++;
     temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来

     if(otherflag == 1) //加法
         sum = sum+temp.toDouble(); //将字符转换成浮点型
     if(otherflag == 2) //-
         sum = sum-temp.toDouble(); //将字符转换成浮点型
     if(otherflag == 3) //*
         sum = sum*temp.toDouble(); //将字符转换成浮点型
     if(otherflag == 4) // /
         sum = sum/temp.toDouble(); //将字符转换成浮点型

     ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
     ui->lineEdit->setText(ui->lineEdit->text()+p->text());
     QString line;
     line.clear(); //清空字符数组line中的内容
     ui->lineEdit_2->setText(line);
     otherflag = flag;
}

void MainWindow::on_theback_clicked()//删除
{
    int a = ui->lineEdit->text().size() - 1;
    if(ui->lineEdit->text().at(a)=='+'||ui->lineEdit->text().at(a)=='-'||ui->lineEdit->text().at(a)=='*'||ui->lineEdit->text().at(a)=='/')
    {
        qDebug()<<"您最后一次按了操作运算符,无法退格";
        return;
    }
    QString line = ui->lineEdit->text();
    line.chop(1);
    ui->lineEdit->setText(line);
    line = ui->lineEdit_2->text();
    line.chop(1);
    ui->lineEdit_2->setText(line);
}

void MainWindow::on_myresult_clicked()
{
    flag2 = 0;
    if(flag == 1)
    {
        temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
        sum = temp.toDouble() + sum; //将字符转换成浮点型
        ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
        ui->lineEdit->setText(ui->lineEdit->text()+"="+QString::number(sum));
        QString line;
        line.clear(); //清空字符数组line中的内容
        ui->lineEdit_2->setText(line);
    }
    if(flag == 2)
    {
        temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
        sum = sum-temp.toDouble(); //将字符转换成浮点型
        ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
        ui->lineEdit->setText(ui->lineEdit->text()+"="+QString::number(sum));
        QString line;
        line.clear(); //清空字符数组line中的内容
        ui->lineEdit_2->setText(line);
    }
    if(flag == 3)
    {
        temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
        sum = sum * temp.toDouble(); //将字符转换成浮点型
        ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
        ui->lineEdit->setText(ui->lineEdit->text()+"="+QString::number(sum));
        QString line;
        line.clear(); //清空字符数组line中的内容
        ui->lineEdit_2->setText(line);
    }
    if(flag == 4)
    {
        temp = ui->lineEdit_2->text(); //获取前面输入的字符,并临时保存起来
        sum = sum / temp.toDouble(); //将字符转换成浮点型
        ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
        ui->lineEdit->setText(ui->lineEdit->text()+"="+QString::number(sum));
        QString line;
        line.clear(); //清空字符数组line中的内容
        ui->lineEdit_2->setText(line);
    }

    ui->lineEdit_2->setText(QString::number(sum)); //将浮点型转换成字符
}

void MainWindow::on_init0_clicked()//归零
{
    flag1 = 0;
    flag2 = 0;
    QString line = ui->lineEdit->text();
    line.clear(); //清空字符数组line中的内容
    ui->lineEdit->setText(line);
    ui->lineEdit_2->setText(line);
    sum = 0;
}

效果图:由于未考虑优先级,所以从左往右计算结果等于8
由于未考虑优先级,所以从左往右计算结果等于8

附言:如果有谁看了我这篇博文后发现有bug,可以留言告诉我。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简易的计算器示例,使用Qt实现: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建主窗口 QWidget window; window.setWindowTitle("Calculator"); // 创建文本框用于显示计算结果 QLineEdit* resultLineEdit = new QLineEdit(&window); resultLineEdit->setReadOnly(true); resultLineEdit->setAlignment(Qt::AlignRight); resultLineEdit->setFixedHeight(30); // 创建按钮布局 QGridLayout* buttonLayout = new QGridLayout; // 创建数字按钮 for (int i = 0; i < 10; ++i) { QPushButton* button = new QPushButton(QString::number(i), &window); buttonLayout->addWidget(button, i / 3, i % 3); QObject::connect(button, &QPushButton::clicked, [=]() { resultLineEdit->setText(resultLineEdit->text() + button->text()); }); } // 创建运算符按钮 QStringList operators = { "+", "-", "*", "/" }; for (int i = 0; i < operators.size(); ++i) { QPushButton* button = new QPushButton(operators.at(i), &window); buttonLayout->addWidget(button, i + 3, 3); QObject::connect(button, &QPushButton::clicked, [=]() { resultLineEdit->setText(resultLineEdit->text() + " " + button->text() + " "); }); } // 创建等号按钮 QPushButton* equalButton = new QPushButton("=", &window); buttonLayout->addWidget(equalButton, 6, 2); QObject::connect(equalButton, &QPushButton::clicked, [=]() { QString expression = resultLineEdit->text(); QScriptEngine engine; QScriptValue result = engine.evaluate(expression); resultLineEdit->setText(result.toString()); }); // 创建清除按钮 QPushButton* clearButton = new QPushButton("C", &window); buttonLayout->addWidget(clearButton, 6, 0); QObject::connect(clearButton, &QPushButton::clicked, [=]() { resultLineEdit->clear(); }); // 创建布局并设置主窗口布局 QVBoxLayout* mainLayout = new QVBoxLayout(&window); mainLayout->addWidget(resultLineEdit); mainLayout->addLayout(buttonLayout); // 显示主窗口 window.setLayout(mainLayout); window.show(); return app.exec(); } ``` 上述代码创建了一个简易的计算器界面,包括一个用于显示计算结果的文本框和数字、运算符按钮。用户可以通过点击按钮输入数字和运算符,并通过点击"="按钮执行计算并显示结果。"C"按钮用于清除文本框内容。 注意:该计算器使用Qt的QScriptEngine类来实现计算功能。它可以解析并计算基本的数学表达式。如果您需要更复杂的计算功能,可能需要使用其他的数学库或编写自己的计算逻辑。 希望这个示例对您有所帮助!如果您有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值