当前位置: 首页 > news >正文

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的作用

概览&#xff1a; MySQL三大日志包括&#xff1a;undolog&#xff0c;redo log&#xff0c;binlog&#xff0c;它们分别有以下作用&#xff1a; undolog&#xff1a;是Innodb存储引擎事务生成的日志。用于事务的回滚和MVCC&#xff0c;保证了事务的原子性。 redo log&#x…...

京东大数据-10月京东咖啡机市场销售数据分析-销售额增长41%,德龙等海外头部品牌店铺数据分析

如今&#xff0c;咖啡已经成为了人们日常生活中流行的生活饮品之一&#xff0c;消费量较大。随着咖啡的受众人群越来越多&#xff0c;消费者们对咖啡品质的要求也愈来愈高&#xff0c;而咖啡品质除了受咖啡豆质量影响外&#xff0c;还受制作过程中煮泡时间、水温和物料数量等因…...

【Android12】WindowManagerService架构分析

Android WindowManagerService架构分析 WindowManagerService(以下简称WMS) 是Android的核心服务。WMS管理所有应用程序窗口(Window)的Create、Display、Update、Destory。 因为Android系统中只有一个WMS&#xff08;运行在SystemServer进程&#xff09;&#xff0c;可以称其为…...

部署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&#xff0c;简称BM&#xff0c;按照字面意思理解就是Facebook官方的商务管理平台&#xff0c;是供广告主团队去使用的一个管理工具。BM可以绑定Facebook公共主页、广告账户等一系列Facebook账号。通过BM&#xff0c;企业就可以在一个后台&#xff0c…...

推荐一款好用的包含表格识别的OCR网站

在当今数字化的时代&#xff0c;文字和表格识别已经成为了许多行业的关键技术。无论是处理大量的纸质文档&#xff0c;还是从网络上收集数据&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术都扮演着重要的角色。然而&#xff0c;对于许多用户来说&#xff0c;OCR软件…...

linux 块设备驱动程序介绍

Linux块设备驱动是Linux操作系统中用于处理块设备的设备驱动程序。块设备是指以固定大小的块单位进行访问的存储设备&#xff0c;例如硬盘、固态硬盘和USB存储设备等。 Linux块设备驱动负责管理块设备的读写操作&#xff0c;并将数据传输到相应的存储设备上。它还负责处理块设…...

知识付费小程序开发:构建个性化学习平台的技术实践

随着在线学习和知识付费的兴起&#xff0c;开发一款知识付费小程序成为了创新的热点之一。本文将通过使用Node.js、Express和MongoDB为例&#xff0c;演示如何构建一个基础的知识付费小程序后端&#xff0c;并实现用户认证和知识内容管理。 1. 初始化项目 首先&#xff0c;确…...

OpenCV极坐标变换函数warpPolar的使用

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为1702字&#xff0c;预计阅读4分钟 前言 前阵子在做方案时&#xff0c;得了几张骨钉的图片&#xff0c;骨科耗材批号效期管理一直是比较麻烦的&#xff0c;贴RFID标签成本太高&#xff0c;所以一般考虑还是…...

类与接口常见面试题

抽象类和接口的对比 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。 从设计层面来说&#xff0c;抽象类是对类的抽象&#xff0c;是一种模板设计&#xff0c;接口是行为的抽象&#xff0c;是一种行为的规范。 相同点 接口和抽象类都不能实例化都位于继承的顶端…...

Windows mysql5.7 执行查询/开启/测试binlog---简易记录

前言&#xff1a;基于虚拟机mysql版本为5.7&#xff0c;增量备份测试那就要用到binlog… 简述&#xff1a;二进制日志&#xff08;binnary log&#xff09;以事件形式记录了对MySQL数据库执行更改的所有操作。 binlog是记录所有数据库表结构变更&#xff08;例如CREATE、ALTER…...

文档安全加固:零容忍盗窃,如何有效预防重要信息外泄

文档安全保护不仅需要从源头着手&#xff0c;杜绝文档在使用和传播过程中产生的泄密风险&#xff0c;同时还需要对文档内容本身进行有效的保护。为了防范通过拷贝、截屏、拍照等手段盗窃重要文档内容信息的风险&#xff0c;迅软DSE加密软件提供了文档加密保护功能&#xff0c;能…...

前端如何设置模板参数

1.背景&#xff1a; 最近接到一个需求&#xff0c;在一个类似chatGpt的聊天工具中&#xff0c;要在对话框中设置模板&#xff0c;后端提供了很多模板参数&#xff0c;然后要求将后端返回的特殊字符转成按钮&#xff0c;编辑完成后在相应的位置拼接成字符串。 2.效果&#xff1a…...

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)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C11系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.探究std::initializer_list是什么…...

计算机网络传输层(期末、考研)

计算机网络总复习链接&#x1f517; 目录 传输层的功能端口UDP协议UDP数据报UDP的首部格式UDP校验 TCP协议&#xff08;必考&#xff09;TCP报文段TCP连接的建立TCP连接的释放TCP的可靠传输TCP的流量控制零窗口探测报文段 TCP的拥塞控制慢开始和拥塞控制快重传和快恢复 TCP和U…...

【STM32入门】4.1中断基本知识

1.中断概览 在开展红外传感器遮挡计次的实验之前&#xff0c;有必要系统性的了解“中断”的基本知识. 中断是指&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转…...

HCIA-H12-811题目解析(3)

1、【单选题】 以下关于路由器的描述&#xff0c;说法错误的是&#xff1f; 2、【单选题】某网络工程师在输入命令行时提示如下信息&#xff1a;Error:Unrecognized command foun at position.对于该提示信息说法正确的是&#xff1f; 3、【单选题】如下图所示的网络&#xf…...

【异步绘制】UIView刷新原理 与 异步绘制

快捷目录 壹、 iOS界面刷新机制贰、浅谈UIView的刷新与绘制概述一.UIView 与 CALayer1. UIView 与 CALayer的关系2. CALayer的一些常用属性contents属性contentGravity属性contentsScale属性maskToBounds属性contentsRect属性 二.View的布局与显示1.图像显示原理2.布局layoutSu…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...