自己在Qt上做的辣鸡计算器
时间:2022-05-03
本文章向大家介绍自己在Qt上做的辣鸡计算器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
#include <QDebug>
#include <stack>
using namespace std;
bool cmopareFun(QChar l,QChar r)
{
if(r == '*' || r == '/')
{
if(l == '*' || r== '/')
return false;
else
return true;
}
else
{
return false;
}
}
double calc(QString str)
{
double res = 0;
double temp = 0;
QString str1 = NULL;
QString str2 = NULL;
stack<QChar> stackFun;
stack<double> stackNum;
for(int i=0;i<str.length();i++)
{
if(str[i].isDigit())
{
str1.append(str[i]);
}
else
{
str1.append(' ');
if(stackFun.size() == 0)
{
stackFun.push(str[i]);
}
else if(::cmopareFun(stackFun.top(),str[i]))
{
stackFun.push(str[i]);
}
else
{
str1.append(stackFun.top());
stackFun.pop();
stackFun.push(str[i]);
}
str1.append(' ');
}
}
while(stackFun.size() >0 )
{
str1.append(' ');
str1.append(stackFun.top());
stackFun.pop();
}
qDebug() << str1;//
for(int i=0;i<str1.length();i++)
{
if(str1[i].isSpace())
{
if(str2.length()>0)
{
temp = str2.toDouble();
stackNum.push(temp);
str2.clear();
}
continue;
}
else if(str1[i].isDigit())
{
str2.append(str1[i]);
}
else
{
double t1,t2;
if(stackNum.size() == 0)
{
str2.append(str1[i]);
continue;
}
else if(stackNum.size() == 1)
{
t1 = 0;
t2 = stackNum.top();
stackNum.pop();
}
else
{
t2 = stackNum.top();
stackNum.pop();
t1 = stackNum.top();
stackNum.pop();
}
if(str1[i] == '+')
stackNum.push(t1 + t2);
if(str1[i] == '-')
stackNum.push(t1 - t2);
if(str1[i] == '*')
stackNum.push(t1 * t2);
if(str1[i] == '/')
stackNum.push(t1 / t2);
}
}
if(str2.length() > 0)
{
stackNum.push(str1.toDouble());
}
res = stackNum.top();
stackNum.pop();
return res;
}
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(ui->pushButton,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_2,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_3,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_4,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_6,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_7,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_9,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_10,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_11,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_12,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_13,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_14,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_15,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_16,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_17,&QPushButton::pressed,this,dealNum);
connect(ui->pushButton_18,&QPushButton::pressed,this,dealNum);
}
Widget::~Widget()
{
delete ui;
}
void Widget::dealNum()
{
QPushButton* pSender = (QPushButton*)this->sender();
QString str = ui->lineEdit->text();
QString add = pSender->text();
double left = 0, right = 0, res = 0;
char calc = 0;
if(add == "c")
{
str.chop(1);
}
else if(isdigit(*add.toStdString().data()))
{
if(str == "0")
str.chop(1);
str += add;
}
else
{
//first function
// if(sscanf(str.toStdString().data(),"%lf%c%lf",&left,&calc,&right) != 3)
// goto RES;
// switch(calc)
// {
// case '+':
// res = left + right;
// break;
// case '-':
// res = left - right;
// break;
// case '*':
// res = left * right;
// break;
// case '/':
// res = left / right;
// break;
// default:
// break;
// }
// str = QString::number(res);
// RES:
// if(strcmp(add.toStdString().data(),"=") != 0)
// str += add;
//second function
if(*add.toStdString().data() == '=')
{
res = ::calc(str);
ui->lineEdit->setText(QString::number(res));
return;
}
else
{
str += add;
}
}
ui->lineEdit->setText(str);
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Spring Boot 整合SpringSecurity
- jacoco-maven-plugin:prepare-agent
- 【LeetCode】两数之和
- 【LeetCode】回文数
- RestTemplate 发送 Https 请求调用
- 【LeetCode】整数反转
- Windows 中搭建Zookeeper的搭建
- 刷题利器 LeetCode
- 使用 Spring Cloud 实现微服务系统
- Java assert关键字
- Java 线程的六种状态
- Mysql 必知必会(一)
- Spring boot 整合dynamic实现多数据源
- Integer 值判断相等
- JDK 8 新特性 之 Strams简单使用