QT实现四则运算计算器
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setMaximumSize(240,300);this->setMinimumSize(240,300);this->setWindowTitle("计算器");QFont f("仿宋",14);ui->lineEdit->setFont(f);//按钮上放图片
// QIcon icon=("D:\\");
// ui->back->setIcon(icon);//改变按钮背景颜色ui->equal->setStyleSheet("background:green");}Widget::~Widget()
{delete ui;
}void Widget::on_btn0_clicked()
{expression+="0";ui->lineEdit->setText(expression);
}void Widget::on_btn1_clicked()
{expression+="1";ui->lineEdit->setText(expression);
}void Widget::on_btn2_clicked()
{expression+="2";ui->lineEdit->setText(expression);
}void Widget::on_btn3_clicked()
{expression+="3";ui->lineEdit->setText(expression);
}void Widget::on_btn4_clicked()
{expression+="4";ui->lineEdit->setText(expression);
}void Widget::on_btn5_clicked()
{expression+="5";ui->lineEdit->setText(expression);
}
void Widget::on_btn6_clicked()
{expression+="6";ui->lineEdit->setText(expression);
}
void Widget::on_btn7_clicked()
{expression+="7";ui->lineEdit->setText(expression);
}
void Widget::on_btn8_clicked()
{expression+="8";ui->lineEdit->setText(expression);
}
void Widget::on_btn9_clicked()
{expression+="9";ui->lineEdit->setText(expression);
}
void Widget::on_add_clicked()
{expression+="+";ui->lineEdit->setText(expression);
}void Widget::on_sub_clicked()
{expression+="-";ui->lineEdit->setText(expression);
}void Widget::on_mul_clicked()
{expression+="*";ui->lineEdit->setText(expression);
}void Widget::on_div_clicked()
{expression+="/";ui->lineEdit->setText(expression);
}void Widget::on_clear_clicked()
{expression.clear();ui->lineEdit->clear();
}void Widget::on_back_clicked()
{expression.chop(1);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_equal_clicked()
{QStack<int> s_num,s_opt;char opt[128]={0};int i=0,temp=0,num1,num2;QByteArray ba=expression.toLocal8Bit(); //QString 转换为QByteArraystrcpy(opt,ba.data()); //data可以把QByteArray转换为const char *//opt[i]还没进栈,看opt优先级与栈顶top的优先级情况,对栈进行操作,之后再操作optwhile(opt[i]!='\0'||s_opt.empty()!=true){if(opt[i]>='0'&&opt[i]<='9') //操作数{temp=temp*10+opt[i]-'0';i++;if(opt[i]<'0'||opt[i]>'9'){s_num.push(temp);temp=0;}}else //操作符{if(s_opt.empty()==true|| //操作符入栈情况Priority(opt[i])>Priority(s_opt.top())|| //1、将要入栈的操作符比栈顶操作符优先级大(s_opt.top()=='('&&opt[i]!=')')) //2、已经有(入栈,将要入栈的不是)而是其他()的操作符{ //3、操作符栈为空s_opt.push(opt[i]);i++;continue;}if(s_opt.top()=='('&&opt[i]==')') //(!opt){ //处理完()内的运算符,剩余(),则直接出栈(s_opt.pop();i++;continue;}if(Priority(opt[i])<=Priority(s_opt.top())|| //操作符出栈,i无++(opt[i]==')'&&s_opt.top()!='(')|| //1、将要入栈的操作符比栈顶操作符优先级小,则先计算已在栈中的(opt[i]=='\0'&&s_opt.empty()!=true) //2、将要入栈的操作符为),则计算()内的运算符) //3、没有要进行入栈的操作符了{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()));expression.clear();}int Widget::Priority(char ch)
{switch(ch){case '(':return 3;case '*':case '/':return 2;case '+':case '-':return 1;default:return 0;}
}

相关文章:
QT实现四则运算计算器
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setMaximumSize(240,300);this->setMinimumSize(240,300);this->setWindowTitle("计算器&…...
mysql的redolog、undo、binlog的作用
概览: MySQL三大日志包括:undolog,redo log,binlog,它们分别有以下作用: undolog:是Innodb存储引擎事务生成的日志。用于事务的回滚和MVCC,保证了事务的原子性。 redo log&#x…...
京东大数据-10月京东咖啡机市场销售数据分析-销售额增长41%,德龙等海外头部品牌店铺数据分析
如今,咖啡已经成为了人们日常生活中流行的生活饮品之一,消费量较大。随着咖啡的受众人群越来越多,消费者们对咖啡品质的要求也愈来愈高,而咖啡品质除了受咖啡豆质量影响外,还受制作过程中煮泡时间、水温和物料数量等因…...
【Android12】WindowManagerService架构分析
Android WindowManagerService架构分析 WindowManagerService(以下简称WMS) 是Android的核心服务。WMS管理所有应用程序窗口(Window)的Create、Display、Update、Destory。 因为Android系统中只有一个WMS(运行在SystemServer进程),可以称其为…...
部署LVS的NET模式
实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…...
如何在Facebook Business Manager进行企业认证
Facebook Business Manager,简称BM,按照字面意思理解就是Facebook官方的商务管理平台,是供广告主团队去使用的一个管理工具。BM可以绑定Facebook公共主页、广告账户等一系列Facebook账号。通过BM,企业就可以在一个后台,…...
推荐一款好用的包含表格识别的OCR网站
在当今数字化的时代,文字和表格识别已经成为了许多行业的关键技术。无论是处理大量的纸质文档,还是从网络上收集数据,OCR(光学字符识别)技术都扮演着重要的角色。然而,对于许多用户来说,OCR软件…...
linux 块设备驱动程序介绍
Linux块设备驱动是Linux操作系统中用于处理块设备的设备驱动程序。块设备是指以固定大小的块单位进行访问的存储设备,例如硬盘、固态硬盘和USB存储设备等。 Linux块设备驱动负责管理块设备的读写操作,并将数据传输到相应的存储设备上。它还负责处理块设…...
知识付费小程序开发:构建个性化学习平台的技术实践
随着在线学习和知识付费的兴起,开发一款知识付费小程序成为了创新的热点之一。本文将通过使用Node.js、Express和MongoDB为例,演示如何构建一个基础的知识付费小程序后端,并实现用户认证和知识内容管理。 1. 初始化项目 首先,确…...
OpenCV极坐标变换函数warpPolar的使用
学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为1702字,预计阅读4分钟 前言 前阵子在做方案时,得了几张骨钉的图片,骨科耗材批号效期管理一直是比较麻烦的,贴RFID标签成本太高,所以一般考虑还是…...
类与接口常见面试题
抽象类和接口的对比 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。 相同点 接口和抽象类都不能实例化都位于继承的顶端…...
Windows mysql5.7 执行查询/开启/测试binlog---简易记录
前言:基于虚拟机mysql版本为5.7,增量备份测试那就要用到binlog… 简述:二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。 binlog是记录所有数据库表结构变更(例如CREATE、ALTER…...
文档安全加固:零容忍盗窃,如何有效预防重要信息外泄
文档安全保护不仅需要从源头着手,杜绝文档在使用和传播过程中产生的泄密风险,同时还需要对文档内容本身进行有效的保护。为了防范通过拷贝、截屏、拍照等手段盗窃重要文档内容信息的风险,迅软DSE加密软件提供了文档加密保护功能,能…...
前端如何设置模板参数
1.背景: 最近接到一个需求,在一个类似chatGpt的聊天工具中,要在对话框中设置模板,后端提供了很多模板参数,然后要求将后端返回的特殊字符转成按钮,编辑完成后在相应的位置拼接成字符串。 2.效果:…...
06 使用v-model实现双向数据绑定
概述 Vue achieves two-way data binding by creating a dedicated directive that watches a data property within your Vue component. The v-model directive triggers data updates when the target data property is modified on the UI. Vue 通过创建一个专用指令来观…...
【C++11特性篇】C++11中新增的initializer_list——初始化的小利器(2)
前言 大家好吖,欢迎来到 YY 滴C11系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.探究std::initializer_list是什么…...
计算机网络传输层(期末、考研)
计算机网络总复习链接🔗 目录 传输层的功能端口UDP协议UDP数据报UDP的首部格式UDP校验 TCP协议(必考)TCP报文段TCP连接的建立TCP连接的释放TCP的可靠传输TCP的流量控制零窗口探测报文段 TCP的拥塞控制慢开始和拥塞控制快重传和快恢复 TCP和U…...
【STM32入门】4.1中断基本知识
1.中断概览 在开展红外传感器遮挡计次的实验之前,有必要系统性的了解“中断”的基本知识. 中断是指:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转…...
HCIA-H12-811题目解析(3)
1、【单选题】 以下关于路由器的描述,说法错误的是? 2、【单选题】某网络工程师在输入命令行时提示如下信息:Error:Unrecognized command foun at position.对于该提示信息说法正确的是? 3、【单选题】如下图所示的网络…...
【异步绘制】UIView刷新原理 与 异步绘制
快捷目录 壹、 iOS界面刷新机制贰、浅谈UIView的刷新与绘制概述一.UIView 与 CALayer1. UIView 与 CALayer的关系2. CALayer的一些常用属性contents属性contentGravity属性contentsScale属性maskToBounds属性contentsRect属性 二.View的布局与显示1.图像显示原理2.布局layoutSu…...
企业级大数据产品架构设计指南
企业级大数据产品架构设计指南:从概念到落地的完整方案 标题选项 企业级大数据架构设计全攻略:从0到1构建可扩展的数据平台大数据产品架构设计指南:如何打造高性能、高可用的企业级解决方案从理论到实践:企业级大数据产品架构设计…...
Z-Image-Turbo-辉夜巫女开发者案例:对接Stable Diffusion WebUI插件生态的兼容方案
Z-Image-Turbo-辉夜巫女开发者案例:对接Stable Diffusion WebUI插件生态的兼容方案 1. 引言:当定制模型遇上主流生态 如果你是一位AI绘画的开发者或爱好者,手里有一个精心调校的、专门生成“辉夜巫女”风格的文生图模型,你可能会…...
Vue项目实战:5分钟搞定ECharts与高德地图(AMap)的完美结合
Vue项目实战:5分钟实现ECharts与高德地图的深度整合 最近在开发一个物流数据可视化平台时,遇到了一个典型需求:如何在地图上动态展示全国各区域的订单流向?经过反复尝试,发现ECharts与高德地图的组合是最佳解决方案。本…...
WebPageTest API完全手册:自动化网站性能监控与集成
WebPageTest API完全手册:自动化网站性能监控与集成 【免费下载链接】WebPageTest Official repository for WebPageTest 项目地址: https://gitcode.com/gh_mirrors/we/WebPageTest WebPageTest 是一款强大的网站性能测试工具,其提供的 API 功能…...
别再只盯着代码了!手把手教你读懂Cartographer的PGM和YAML地图文件(附Notepad++实操)
从二进制到坐标系:Cartographer地图文件深度解析与实战调参指南 当你第一次打开Cartographer生成的.pgm和.yaml文件时,是否感觉像在解读某种外星密码?那些数字和参数背后,藏着机器人如何理解世界的秘密。本文将带你像侦探一样拆解…...
如何使用Audacity:免费音频编辑与录制全攻略
如何使用Audacity:免费音频编辑与录制全攻略 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity Audacity是一款免费开源的音频编辑与录制软件,支持多轨录音、音频剪辑、效果处理等专业功能&am…...
百川2-13B-4bits模型微调实战:用OpenClaw日志数据提升任务理解力
百川2-13B-4bits模型微调实战:用OpenClaw日志数据提升任务理解力 1. 为什么需要针对OpenClaw任务做模型微调 去年夏天,当我第一次尝试用OpenClaw自动化处理日常工作报告时,发现一个有趣的现象:当我直接说"帮我整理上周的销…...
揭秘BongoCat:桌面上的数字伙伴,重新定义人机交互新体验
揭秘BongoCat:桌面上的数字伙伴,重新定义人机交互新体验 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作,每一次输入都充满趣味与活力! 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat…...
华为,华三交换机开启snmp的命令
华为,华三交换机开启snmp的命令 配置community指定版本为v2c, v3(支持这2个版本)指定源接口 snmp-agent snmp-agent community read public snmp-agent sys-info version v2c v3 snmp-agent protocol source-interface MEth0/0/0配置完成后&a…...
常见开源软件协议介绍
在当今数字化时代,开源软件如同一股洪流,席卷了整个技术领域。从我们日常使用的操作系统,到复杂的大数据处理框架,开源软件无处不在。然而,在这繁荣的开源生态背后,有一群默默守护规则的 “卫士”ÿ…...
