目录
目录
在这里主要记载了如何使用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_