Qt creator实现一个简单计算器

目录

1 界面设计

2 思路简介

3 代码

目录

1 界面设计

​2 思路简介

3 代码

3.1 widget.h

3.2 widget.c

4 完整代码

        在这里主要记载了如何使用Qt creator完成一个计算器的功能。该计算器可以实现正常的加减乘除以及括号操作,能实现简单的计算器功能。

1 界面设计

该计算器的界面设计如下所示:

2 思路简介

        1. 中缀表达式的构建

        将按键输入字符转换为字符串的形式。

        比如:中缀表达式3+2+34+(6-3*5);

        那么可以定义一个字符数组char Chars[1024];存储,之后使用QString::fromUtf8(this->Chars);将该字符数组转换为LineEdit可以显示的类型。

        2. 中缀表达式转变为后缀表达式

        直接按照字符将中缀转变为后缀表达式,在进行计算时,再转换为数据和符号。这里在将中缀表达式转变为后缀表达式时,把每个数都使用&进行分割,方便后续计算。比如32+21转换为后缀表达式就是32&&21+。

        3. 使用后缀表达式进行计算

3 代码

3.1 widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void Fb_Change(); // 中缀转换为后缀表达式
    void Clear();
public:
    int i,j;

private slots:
    void on_but_one_clicked();

    void on_but_zero_clicked();

    void on_but_two_clicked();

    void on_but_three_clicked();

    void on_but_four_clicked();

    void on_but_five_clicked();

    void on_but_six_clicked();

    void on_but_seven_clicked();

    void on_but_eight_clicked();

    void on_but_nine_clicked();

    void on_but_add_clicked();

    void on_but_sub_clicked();

    void on_but_mul_clicked();

    void on_but_div_clicked();

    void on_but_leftbrk_clicked();

    void on_but_rightbrk_clicked();

    void on_but_cls_clicked();

    void on_but_bit_clicked();

    void on_but_eql_clicked();

    void on_but_close_clicked();

private:
    Ui::Widget *ui;
    int Data[128];    // data stack
    char suffix[128];  //  后缀表达式 stack
    char sign[128];     // 符号栈
    char Chars[1024]; // zhong缀表达式字符数组
    int data_sp = 0;  // 数据栈顶指针
    int suffix_sp = 0;  // 后缀栈顶指针
    int sign_sp = 0;    // 符号栈顶指针
    int char_sp = 0;  //
    int Operation_end = 0;  // 运算结束标志位,1:运算结束
};
#endif // WIDGET_H

3.2 widget.c

#include "widget.h"
#include "ui_widget.h"
#include "qdebug.h"

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

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


void Widget::on_but_one_clicked()
{
    this->Chars[char_sp++] = '1';
    Chars[char_sp] ='\0';
    ui->lineEdit->setText(QString::fromUtf8(this->Chars));
}

void Widget::on_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B or D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值