关于#Qt#的问题,如何解决?

还是上一个代码程序,设计一个简单的四则计算器
纠正了原本代码程序中一个类型转换的问题,代码运行也不会报错了
但是!点击运行以后,在执行后的窗口里面
比如 计算1+1 =,在点击“=”号以后,程序就卡住了,对卡住了,没反应了
就下图这样

img

我寻思着代码也没问题啊,迷茫
贴上头文件代码和.cpp代码,麻烦大lao帮我看看

=号按钮控件命名为 pushButton_9
其他的按钮使用都是正常的,就=号一点就卡

.h 文件


#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QStack>
#include <qstring>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget

{
    Q_OBJECT

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

private slots:
    void on_pushButton_12_clicked();

    void on_pushButton_11_clicked();

    void on_pushButton_10_clicked();

    void on_pushButton_8_clicked();

    void on_pushButton_7_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_20_clicked();

    void on_pushButton_19_clicked();

    void on_pushButton_18_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_13_clicked();

    void on_pushButton_16_clicked();

    void on_pushButton_14_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_9_clicked();

    void on_pushButton_17_clicked();

    void on_pushButton_15_clicked();

    void on_lineEdit_textEdited(const QString &arg1);

private:
    Ui::Widget *ui;
    QString expression;

    int Priority(char ch);
};

#endif // WIDGET_H


.cpp文件

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


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setMaximumSize(210,280);
    this->setMinimumSize(210,280);

    this->setWindowTitle("计算器");

    QFont f("仿宋",14);
    ui->lineEdit->setFont(f);

    //按钮上放图片
    QIcon con("E:\\zhuomianwenjian\\workstudy\\QT\\QT project\\qmake2\\culculate\\tt.png");
    ui->pushButton_15->setIcon(con);

}

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



void Widget::on_pushButton_12_clicked()
{
    expression +="1";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_11_clicked()
{
    expression +="2";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_10_clicked()
{
    expression +="3";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_8_clicked()
{
    expression +="4";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_7_clicked()
{
    expression +="5";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_6_clicked()
{
    expression +="6";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_20_clicked()
{
    expression +="7";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_19_clicked()
{
    expression +="8";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_18_clicked()
{
    expression +="9";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_clicked()
{
    expression +="(";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_2_clicked()
{
    expression +="0";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_3_clicked()
{
    expression +=")";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_13_clicked()
{
    expression +="+";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_16_clicked()
{
    expression +="-";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_14_clicked()
{
    expression +="*";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_5_clicked()
{
    expression +="/";
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_17_clicked()
{
    expression.clear();
    ui->lineEdit->clear();
}


void Widget::on_pushButton_15_clicked()
{
    expression.chop(1);
    ui->lineEdit->setText(expression);
}


void Widget::on_pushButton_9_clicked()
{
    QStack<int> s_num, s_opt;

    char opt[128] = {0};
    int i=0, tmp=0, num1, num2;

    QString expression = "1+2";
    QByteArray ba = expression.toUtf8();
    strcpy(opt, ba.data());

    while (opt[i] != '\0' || s_opt.empty() != true)
    {
        if (opt[i] >='0' && opt[i] <='9')
        {
            tmp = tmp*10 + opt[i] - '0';
                i++;
            if (opt[i]<'0'||opt[i]>'9')
            {
                s_num.push(tmp);
                tmp = 0;
            }
        }


        else                //操作符
        {
            if (s_opt.empty()==true || Priority(s_opt.top()) || (s_opt.top()=='(' && opt[i] !=')'))
            {
                s_opt.push(opt[i]);
                i++;
                continue;
            }

            if (s_opt.top()=='(' && opt[i] !=')')
            {
                s_opt.pop();
                i++;
                continue;
            }

            if (Priority(opt[i]) <= Priority(s_opt.top()) || (opt[i] ==')' &&s_opt.top() !='(') ||(opt[i] =='\0' && s_opt.empty() !=true))
            {
                char ch = s_opt.top();
                s_opt.pop();
                switch(ch)
                {
                case '+':
                    num1 = s_num.top ();
                    s_num.pop();
                    num2 = s_num.top();
                    s_num.pop();
                    s_num.push(num1 + num2);
                    break;
                case '-':
                    num1 = s_num.top ();
                    s_num.pop();
                    num2 = s_num.top();
                    s_num.pop();
                    s_num.push(num1 - num2);
                    break;
                case '*':
                    num1 = s_num.top ();
                    s_num.pop();
                    num2 = s_num.top();
                    s_num.pop();
                    s_num.push(num1 * num2);
                    break;
                case '/':
                    num1 = s_num.top ();
                    s_num.pop();
                    num2 = s_num.top();
                    s_num.pop();
                    s_num.push(num1 / num2);
                    break;
                }
            }

        }
    }
    ui->lineEdit->setText(QString::number(s_num.top()));
}

int Widget::Priority(char ch)
{
    switch(ch)
    {
        case'(':
            return 3;
        case'*':
        case'/':
            return 2;
        case'+':
        case'-':
            return 1;
        default:
            return 0;
    }
}




你把你这些 button1 button2对应的是哪个按钮说说清楚,特别是=是哪个按钮,不然谁知道呢。