#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
h.insert('+',1);//数字越大,优先级越高;
h.insert('-',1);
h.insert('*',2);
h.insert('/',2);
h.insert('%',2);
QFont lineEdit_font("微软雅黑",20);
ui->lineEdit->setFont(lineEdit_font);
QPixmap delIcon("E:\\1111\\QtProgram\\Caclutor\\delbutton.png");
}
Widget::~Widget()
{
delete ui;
}
//核心逻辑---计算,使用栈来完成:
void Widget::on_equalButton_clicked()
{
//将QString转换为char* ;
QByteArray str=program.toLatin1();
s=str.data();
int n=program.size();
//program是输入的字符串;
for(int i=0;i<n;i++){
char c=s[i];
if(isdigit(c))
{
int x=0,j=i;
while(j<n&&isdigit(s[j]))
{
x=x*10+s[j++]-'0';
}
i=j-1;
no.push(x);
}
else if(c=='(') op.push(c);
else if(c==')') {
while(op.top()!='('){
eval();
}
op.pop();
}
else {
while(op.size()&&op.top()!='('&&h[op.top()]>=h[c]){
eval();
}
op.push(c);
}
}//for
while(op.size()) eval();
res=no.top();
program=QString::number(res,10);
ui->lineEdit->setText(program);
}
void Widget::eval()
{
int b=no.top();
no.pop();
int a=no.top();
no.pop();
char ch=op.top();
op.pop();
int x=0;
if(ch=='+') x=a+b;
else if(ch=='-') x=a-b;
else if(ch=='*') x=a*b;
else x=a/b;
no.push(x);
}
void Widget::on_zeroButton_clicked()
{
program+="0";
ui->lineEdit->setText(program);
}
void Widget::on_oneButton_clicked()
{
program+="1";
ui->lineEdit->setText(program);
}
void Widget::on_twoButton_clicked()
{
program+="2";
ui->lineEdit->setText(program);
}
void Widget::on_threeButton_clicked()
{
program+="3";
ui->lineEdit->setText(program);
}
void Widget::on_fourButton_clicked()
{
program+="4";
ui->lineEdit->setText(program);
}
void Widget::on_fiveButton_clicked()
{
program+="5";
ui->lineEdit->setText(program);
}
void Widget::on_sixButton_clicked(){
program+="6";
ui->lineEdit->setText(program);
}
void Widget::on_sevenButton_clicked()
{
program+="7";
ui->lineEdit->setText(program);
}
void Widget::on_eightButton_clicked()
{
program+="8";
ui->lineEdit->setText(program);
}
void Widget::on_nineButton_clicked()
{
program+="9";
ui->lineEdit->setText(program);
}
void Widget::on_addButton_clicked()
{
program+="+";
ui->lineEdit->setText(program);
}
void Widget::on_subButton_clicked()
{
program+="-";
ui->lineEdit->setText(program);
}
void Widget::on_mulButton_clicked()
{
program+="*";
ui->lineEdit->setText(program);
}
void Widget::on_divButton_clicked()
{
program+="/";
ui->lineEdit->setText(program);
}
void Widget::on_remanButton_clicked()
{
program+="(";
ui->lineEdit->setText(program);
}
void Widget::on_delButton_clicked()
{
program.chop(1);//将字符串末尾的一个字符删除
ui->lineEdit->setText(program);
}
void Widget::on_clearButton_clicked()
{
program.clear();
ui->lineEdit->clear();
}
void Widget::on_pointButton_clicked()
{
program+=")";
ui->lineEdit->setText(program);
}
QT实现计算器的基本功能
需积分: 9 192 浏览量
2022-10-28
22:35:23
上传
评论
收藏 9KB ZIP 举报
黒猫.
- 粉丝: 2079
- 资源: 3