QT学习——制作一个简易的计算器

基于QT5.15.2  在 Qt Creator 中开发

1、首先设计一个简单的计算器UI

2、代码部分

mainwindow.h的代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class mainwindow; }
QT_END_NAMESPACE

class mainwindow : public QWidget
{
    Q_OBJECT

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

// 槽函数的声明
private slots:
    void number_clicked();
    void operator_clicked();
    void equal_clicked();
    void clear_clicked();

private:
    Ui::mainwindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp 的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>

double ans = 0.0;
bool addFlag = false;
bool subFlag = false;
bool mulFlag = false;
bool divFlag = false;

mainwindow::mainwindow(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::mainwindow)
{
    ui->setupUi(this);

    // 进行信号和槽的连接
    connect(ui->pushButton_0, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_1, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_2, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_3, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_4, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_5, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_6, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_7, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_8, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));
    connect(ui->pushButton_9, SIGNAL(clicked(bool)), this, SLOT(number_clicked()));

    connect(ui->pushButton_add, SIGNAL(clicked(bool)), this, SLOT(operator_clicked()));
    connect(ui->pushButton_sub, SIGNAL(clicked(bool)), this, SLOT(operator_clicked()));
    connect(ui->pushButton_mul, SIGNAL(clicked(bool)), this, SLOT(operator_clicked()));
    connect(ui->pushButton_div, SIGNAL(clicked(bool)), this, SLOT(operator_clicked()));

    connect(ui->pushButton_result, SIGNAL(clicked(bool)), this, SLOT(equal_clicked()));
    connect(ui->pushButton_clear, SIGNAL(clicked(bool)), this, SLOT(clear_clicked()));

}

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


void mainwindow::number_clicked()
{
    // 数字按钮的槽
    QPushButton *num = dynamic_cast<QPushButton *>(sender());
    QString str = ui->lineEdit->text();
    ui->lineEdit->setText(str+num->text());
}

void mainwindow::operator_clicked()
{
    // 运算符按钮的槽
    addFlag = false;
    subFlag = false;
    mulFlag = false;
    divFlag = false;
    QPushButton *op = dynamic_cast<QPushButton *>(sender());
    QString str = ui->lineEdit->text();
    ui->lineEdit->setText(str+op->text());
    QString opVal = op->text();
    if(QString::compare(opVal, "+", Qt::CaseInsensitive) == 0){
        addFlag = true;
    }else if(QString::compare(opVal, "-", Qt::CaseInsensitive) == 0){
        subFlag = true;
    }else if(QString::compare(opVal, "*", Qt::CaseInsensitive) == 0){
        mulFlag = true;
    }else if(QString::compare(opVal, "/", Qt::CaseInsensitive) == 0){
        divFlag = true;
    }
}

void mainwindow::equal_clicked()
{
    // 等式按钮的槽
    QPushButton *op = dynamic_cast<QPushButton *>(sender());
    QString str = ui->lineEdit->text();
    QList <QString> list;
    if (addFlag)
    {
        list = str.split("+");
        ans = list.at(0).toDouble() + list.at(1).toDouble();
    }
    else if(subFlag)
    {
        list = str.split("-");
        ans = list.at(0).toDouble() - list.at(1).toDouble();
    }
    else if(mulFlag)
    {
        list = str.split("*");
        ans = list.at(0).toDouble() * list.at(1).toDouble();
    }
    else if(divFlag)
    {
        list = str.split("/");
        ans = list.at(0).toDouble() / list.at(1).toDouble();
    }
    QString StringAns = QString::number(ans);
    ui->lineEdit->setText(str+op->text());
    ui->lineEdit_2->setText(StringAns);
}

void mainwindow::clear_clicked()
{
    // 清除按钮的槽
    ui->lineEdit->setText("");
    ui->lineEdit_2->setText("");
}

main.cpp的代码

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    mainwindow w;
    w.show();
    return a.exec();
}

3、程序效果(目前只能进行一次运算)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值