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…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...

AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...