使用Qt制作一个简易计算器(纯代码实现)

基于Qt,使用C++语言开发的一个简易计算器,包含了加减乘除四则运算。(仅适合初级学者学习)(纯代码实现)

废话不多说,直接上代码。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QLineEdit>
#include <QString>
#include <QList>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
    void btn_num();
    void add();
    void sub();
    void mul();
    void del();
    void eql();

public:
    QLineEdit *lineEdit1;
    QPushButton *btn_0;
    QPushButton *btn_1;
    QPushButton *btn_2;
    QPushButton *btn_3;
    QPushButton *btn_4;
    QPushButton *btn_5;
    QPushButton *btn_6;
    QPushButton *btn_7;
    QPushButton *btn_8;
    QPushButton *btn_9;
    QPushButton *btn_add;
    QPushButton *btn_sub;
    QPushButton *btn_mul;
    QPushButton *btn_del;
    QPushButton *btn_eql;

    int num1;
    int num2;
    int num3;
    int num4;

};
#endif // WIDGET_H

widget.cpp

#include "widget.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    setFixedSize(400, 300);
    lineEdit1 = new QLineEdit;

    btn_0 = new QPushButton("0", this);
    btn_1 = new QPushButton("1", this);
    btn_2 = new QPushButton("2", this);
    btn_3 = new QPushButton("3", this);
    btn_4 = new QPushButton("4", this);
    btn_5 = new QPushButton("5", this);
    btn_6 = new QPushButton("6", this);
    btn_7 = new QPushButton("7", this);
    btn_8 = new QPushButton("8", this);
    btn_9 = new QPushButton("9", this);
    btn_add = new QPushButton("+", this);
    btn_sub = new QPushButton("-", this);
    btn_mul = new QPushButton("*", this);
    btn_del = new QPushButton("/", this);
    btn_eql = new QPushButton("=", this);

    /*按键大小*/
    lineEdit1->setFixedSize(400,100);
    //btn_0->setFixedSize(100, 100);
    //btn_1->setFixedSize(100, 100);
    //btn_2->setFixedSize(100, 100);
    //btn_3->setFixedSize(100, 100);
    //btn_4->setFixedSize(100, 100);
    //btn_5->setFixedSize(100, 100);
    //btn_6->setFixedSize(100, 100);
    //btn_7->setFixedSize(100, 100);
    //btn_8->setFixedSize(100, 100);
    //btn_9->setFixedSize(100, 100);
    //btn_add->setFixedSize(100, 100);
    //btn_sub->setFixedSize(100, 100);
    //btn_mul->setFixedSize(100, 100);
    //btn_del->setFixedSize(100, 100);
    //btn_eql->setFixedSize(100, 100);


    /*水平对齐*/
    QHBoxLayout *hbox0 = new QHBoxLayout;
    hbox0->addWidget(lineEdit1);

    QHBoxLayout *hbox1 = new QHBoxLayout;

    hbox1->addWidget(btn_7);
    hbox1->addWidget(btn_8);
    hbox1->addWidget(btn_9);

    QHBoxLayout *hbox2 = new QHBoxLayout;

    hbox2->addWidget(btn_4);
    hbox2->addWidget(btn_5);
    hbox2->addWidget(btn_6);

    QHBoxLayout *hbox3 = new QHBoxLayout;

    hbox3->addWidget(btn_3);
    hbox3->addWidget(btn_2);
    hbox3->addWidget(btn_1);

    QHBoxLayout *hbox4 = new QHBoxLayout;

    hbox4->addWidget(btn_add);
    hbox4->addWidget(btn_0);
    hbox4->addWidget(btn_sub);

    QHBoxLayout *hbox5 = new QHBoxLayout;

    hbox5->addWidget(btn_mul);
    hbox5->addWidget(btn_del);
    hbox5->addWidget(btn_eql);
    /*垂直对齐*/
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addLayout(hbox0);
    vbox->addLayout(hbox1);
    vbox->addLayout(hbox2);
    vbox->addLayout(hbox3);
    vbox->addLayout(hbox4);
    vbox->addLayout(hbox5);

    /* 将布局管理器添加到主窗体中 */
    setLayout(vbox);

    connect(btn_0, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_1, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_2, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_3, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_4, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_5, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_6, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_7, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_8, &QPushButton::clicked, this, &Widget::btn_num);
    connect(btn_9, &QPushButton::clicked, this, &Widget::btn_num);

    connect(btn_add, &QPushButton::clicked, this, &Widget::add);
    connect(btn_sub, &QPushButton::clicked, this, &Widget::sub);
    connect(btn_mul, &QPushButton::clicked, this, &Widget::mul);
    connect(btn_del, &QPushButton::clicked, this, &Widget::del);
    connect(btn_eql, &QPushButton::clicked, this, &Widget::eql);
}

int status = 0;
void Widget::btn_num()
{
    QPushButton *btn = static_cast<QPushButton *> (sender());
    num2 = btn->text().toInt();
    QString str1 = btn->text();
    QString str2 = lineEdit1->text();
    if(str1 == "NULL"){
        str2 = "0";
        lineEdit1->setText(str2);
        QString str3 = str2;
    }else{
        str2.append(str1);
        lineEdit1->setText(str2);
    }
}

void Widget::add()
{
    QPushButton *btn = static_cast<QPushButton *> (sender());
    num2 = btn->text().toInt();
    QString str1 = btn->text();
    QString str2 = lineEdit1->text();
    status = 1;
    str2.append(str1);
    lineEdit1->setText(str2);
}

void Widget::sub()
{
    QPushButton *btn = static_cast<QPushButton *> (sender());
    num2 = btn->text().toInt();
    QString str1 = btn->text();
    QString str2 = lineEdit1->text();
    status = 2;
    str2.append(str1);
    lineEdit1->setText(str2);
}

void Widget::mul()
{
    QPushButton *btn = static_cast<QPushButton *> (sender());
    num2 = btn->text().toInt();
    QString str1 = btn->text();
    QString str2 = lineEdit1->text();
    status = 3;
    str2.append(str1);
    lineEdit1->setText(str2);
}

void Widget::del()
{
    QPushButton *btn = static_cast<QPushButton *> (sender());
    num2 = btn->text().toInt();
    QString str1 = btn->text();
    QString str2 = lineEdit1->text();
    status = 4;
    str2.append(str1);
    lineEdit1->setText(str2);
}

void Widget::eql()
{
    QPushButton *btn = static_cast<QPushButton *> (sender());
    num2 = btn->text().toInt();
    QString str1 = btn->text();
    QString str2 = lineEdit1->text();

    str2.append(str1);

    QString str = lineEdit1->text();
    QList<int> numbers;
    switch(status){
        case 0: ;break;
        case 1:{
            QStringList parts = str.split("+");
            for(const QString &part:parts){
                int num = part.toInt();
                if(num != 0){
                    numbers.append(num);
                }
            }
            num1 = numbers[0];
            num2 = numbers[1];
            num1 += num2;
            lineEdit1->setText(QString::number(num1));}
            break;
        case 2:{
            QStringList parts = str.split("-");
            for(const QString &part:parts){
                int num = part.toInt();
                if(num != 0){
                    numbers.append(num);
                }
            }
            num1 = numbers[0];
            num2 = numbers[1];
            num1 -= num2;
            lineEdit1->setText(QString::number(num1));}
            break;
        case 3:{
            QStringList parts = str.split("*");
            for(const QString &part:parts){
                int num = part.toInt();
                if(num != 0){
                    numbers.append(num);
                }
            }
            num1 = numbers[0];
            num2 = numbers[1];
            num3 = num1 * num2;
            lineEdit1->setText(QString::number(num3));}
            break;
        case 4:{
            QStringList parts = str.split("+");
            for(const QString &part:parts){
                int num = part.toInt();
                if(num != 0){
                    numbers.append(num);
                }
            }
            num1 = numbers[0];
            num2 = numbers[1];
            num4 = num1 / num2;
            lineEdit1->setText(QString::number(num4));}
            break;
    }
}

Widget::~Widget()
{
}

main.cpp在创建时几乎没变。so~

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

余额充值