专业建站推广企业,导购网站如何做,网站制作专业吗,一百度网站建设这是我们要包含的头文件
#include QWidget
#includeQStack
#includestring.h
#includestring 这是我在ui界面创建的计算机基础框架。
接下来要实现按住每个按钮在白框内显示#xff1b;
因此我们要定义一个QString 类型的变量
QString e…这是我们要包含的头文件
#include QWidget
#includeQStack
#includestring.h
#includestring 这是我在ui界面创建的计算机基础框架。
接下来要实现按住每个按钮在白框内显示
因此我们要定义一个QString 类型的变量
QString expression;
接下来是我对每个按钮的实现
void Widget::on_one_clicked()
{expression1;ui-lineEdit-setText(expression);
}void Widget::on_two_clicked()
{expression2;ui-lineEdit-setText(expression);
}void Widget::on_three_clicked()
{expression3;ui-lineEdit-setText(expression);
}void Widget::on_four_clicked()
{expression4;ui-lineEdit-setText(expression);
}void Widget::on_five_clicked()
{expression5;ui-lineEdit-setText(expression);
}void Widget::on_six_clicked()
{expression6;ui-lineEdit-setText(expression);
}void Widget::on_seven_clicked()
{expression7;ui-lineEdit-setText(expression);
}void Widget::on_eight_clicked()
{expression8;ui-lineEdit-setText(expression);
}void Widget::on_nine_clicked()
{expression9;ui-lineEdit-setText(expression);
}void Widget::on_zero_clicked()
{expression0;ui-lineEdit-setText(expression);
}void Widget::on_left_clicked()
{expression(;ui-lineEdit-setText(expression);
}void Widget::on_right_clicked()
{expression);ui-lineEdit-setText(expression);
}void Widget::on_cheng_clicked()
{expression*;ui-lineEdit-setText(expression);
}void Widget::on_chu_clicked()
{expression/;ui-lineEdit-setText(expression);
}void Widget::on_plus_clicked()
{expression;ui-lineEdit-setText(expression);
}void Widget::on_sub_clicked()
{expression-;ui-lineEdit-setText(expression);
} C键的实现
void Widget::on_clear_clicked()
{expression.clear();ui-lineEdit-clear();
}先对expression清空再清空白框。
删除键的实现
void Widget::on_deletebutton_clicked()
{expression.chop(1);ui-lineEdit-setText(expression);
}
使用chop可以吃掉最后一个。
以下是最难的一个件键
这里的代码使用了我之前用栈实现四则运算的代码。
char str[128]{0}; 先定义一个char *类型
qstrcpy(str, expression.toUtf8().data());
使用这个可以把QString类型转换为char*类型
以下就是实现步骤
思路就是创建一个操作符栈数字栈。
如果该操作符的优先级高于栈顶的操作符则该操作符入栈。
否则栈顶的操作符出栈并把数字栈的前两个数字出栈运算。
再把结果放入数字栈。
float n1, n2, tmp 0;int priority;char op;QStackfloat numS;QStackchar opS;int mylengthstrlen(str);for (int i 0; i mylength ; i){if (str[i] 0 str[i] 9){tmp tmp * 10 float(str[i] - 0);}else{numS.push(tmp);priority getpriority(str[i]);while (!opS.empty() priority getpriority(opS.top())){op opS.top();opS.pop();n2 numS.top();numS.pop();n1 numS.top();numS.pop();n1 cal_one(n1, op, n2);numS.push(n1);}opS.push(str[i]);tmp 0;}}// 处理最后一个数字numS.push(tmp);// 计算剩余的表达式while (!opS.empty()){op opS.top();opS.pop();n2 numS.top();numS.pop();n1 numS.top();numS.pop();float result cal_one(n1, op, n2);numS.push(result);}ui-lineEdit-setText(QString::number(numS.top()));
}int Widget::getpriority(char ch)
{int priority -1;//-1代表没有找到对应的运算符if (ch || ch -){priority 1;}else if(ch*||ch/){priority 2;}return priority;
}
int Widget::cal_one(float n1, char op, float n2)
{float result 0;switch (op) {case :result n1 n2;break;case -:result n1 - n2;break;case *:result n1 * n2;break;case /:result n1 / n2;break;}return result;
}
ui-lineEdit-setText(QString::number(numS.top()));
}
这一步可以把int类型转为QString 类型。
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);//按钮放图片QIcon con(C:\\Users\\15322\\Pictures\\Screenshots\\tt.PNG);ui-deletebutton-setIcon(con);//ui-equal-setStyleSheet(backgroup:blue);
} 这一步可以再按钮上放图片。
一下就是结果