还是上一个代码程序,设计一个简单的四则计算器
纠正了原本代码程序中一个类型转换的问题,代码运行也不会报错了
但是!点击运行以后,在执行后的窗口里面
比如 计算1+1 =,在点击“=”号以后,程序就卡住了,对卡住了,没反应了
就下图这样
我寻思着代码也没问题啊,迷茫
贴上头文件代码和.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对应的是哪个按钮说说清楚,特别是=是哪个按钮,不然谁知道呢。