#QT(一种朴素的计算器实现方法)

1.IDE:QTCreator


2.实验:这是全靠自己想法写的计算器,没有参考任何教程。

(1)这个计算器只要有运算符敲入就会进行一次运算,所以他没有先后之后,无法满足运算优先级。

(2)小数点第六位有小概率出现不准的情况。

(3)实时计算的值存放在全局变量total中。

(4)是将字符串转为数字

(5)用一个temp_text来记录数字,每次运算符按下会将其转换为数字然后计算完毕之后将其清空。而最上面的text则只是一个界面,用于观察自己输入的运算式子。

(6)第三条text专门用于显示结果,只有=按下时才会显示结果。


3.记录

13c2e63d1fd64481bdfa20cc2d7e8dbc.pngaf9c5cf1117b408fa9a3552623724415.png


4.代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_one_pb_clicked();void on_add_pb_clicked();void on_calculator_pb_clicked();void on_multiply_pb_clicked();void on_except_pb_clicked();void on_subtract_pb_clicked();void on_two_pb_clicked();void on_three_pb_clicked();void on_four_pb_clicked();void on_five_pb_clicked();void on_six_pb_clicked();void on_seven_pb_clicked();void on_eight_pb_clicked();void on_nine_pb_clicked();void on_zero_pb_clicked();void on_dot_pb_clicked();void on_clear_pb_clicked();void on_delete_pb_clicked();void on_resi_pb_clicked();private:Ui::Widget *ui;QChar last_ysf;     //记录上一次运算符是什么uint8_t index1;     // *uint8_t index2;     // /uint8_t index3;     // %uint8_t index4;     // +uint8_t index5;     // -float number_temp;  //临时记录运算数字float total;        //结果
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMessageBox>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);}Widget::~Widget()
{delete ui;
}void Widget::on_calculator_pb_clicked()     //calculate
{number_temp=ui->temp->text().toFloat();if(last_ysf=='*')total = total*number_temp;else if(last_ysf=='/')total = total/number_temp;else if(last_ysf=='%'){int resi_temp;int total_temp;resi_temp=ui->temp->text().toInt();  //求余必须为整数total_temp=total;total = total_temp % resi_temp;}else if(last_ysf=='+')total = total+number_temp;else if(last_ysf=='-')total = total-number_temp;last_ysf='=';                    //记录本次的运算符号ui->temp->clear();QString result_string = QString::asprintf("%.6f",total);ui->lineEdit->insert("=");               //插入一个*显示符ui->lineEdit->insert(result_string);ui->result->setText(result_string);
}void Widget::on_multiply_pb_clicked()   // *
{number_temp=ui->temp->text().toFloat();ui->lineEdit->insert("*");               //插入一个*显示符if(last_ysf=='*')total = total*number_temp;else if(last_ysf=='/')total = total/number_temp;else if(last_ysf=='%'){int resi_temp;int total_temp;resi_temp=ui->temp->text().toInt();  //求余必须为整数total_temp=total;total = total_temp % resi_temp;}else if(last_ysf=='+')total = total+number_temp;else if(last_ysf=='-')total = total-number_temp;elsetotal = number_temp;last_ysf='*';                    //记录本次的运算符号ui->temp->clear();
}void Widget::on_except_pb_clicked()   //  /
{number_temp=ui->temp->text().toFloat();ui->lineEdit->insert("/");               //插入一个*显示符if(last_ysf=='*')total = total*number_temp;else if(last_ysf=='/')total = total/number_temp;else if(last_ysf=='%'){int resi_temp;int total_temp;resi_temp=ui->temp->text().toInt();  //求余必须为整数total_temp=total;total = total_temp % resi_temp;}else if(last_ysf=='+')total = total+number_temp;else if(last_ysf=='-')total = total-number_temp;elsetotal = number_temp;last_ysf='/';                    //记录本次的运算符号ui->temp->clear();
}void Widget::on_add_pb_clicked()    // +
{number_temp=ui->temp->text().toFloat();ui->lineEdit->insert("+");               //插入一个*显示符if(last_ysf=='*')total = total*number_temp;else if(last_ysf=='/')total = total/number_temp;else if(last_ysf=='%'){int resi_temp;int total_temp;resi_temp=ui->temp->text().toInt();  //求余必须为整数total_temp=total;total = total_temp % resi_temp;}else if(last_ysf=='+')total = total+number_temp;else if(last_ysf=='-')total = total-number_temp;elsetotal = number_temp;last_ysf='+';                    //记录本次的运算符号ui->temp->clear();}void Widget::on_subtract_pb_clicked()   // -
{number_temp=ui->temp->text().toFloat();ui->lineEdit->insert("-");               //插入一个*显示符if(last_ysf=='*')total = total*number_temp;else if(last_ysf=='/')total = total/number_temp;else if(last_ysf=='%'){int resi_temp;int total_temp;resi_temp=ui->temp->text().toInt();  //求余必须为整数total_temp=total;total = total_temp % resi_temp;}else if(last_ysf=='+')total = total+number_temp;else if(last_ysf=='-')total = total-number_temp;elsetotal = number_temp;last_ysf='-';                    //记录本次的运算符号ui->temp->clear();
}void Widget::on_resi_pb_clicked()  // %
{number_temp=ui->temp->text().toFloat();ui->lineEdit->insert("%");               //插入一个*显示符if(last_ysf=='*')total = total*number_temp;else if(last_ysf=='/')total = total/number_temp;else if(last_ysf=='%'){int resi_temp;int total_temp;resi_temp=ui->temp->text().toInt();  //求余必须为整数total_temp=total;total = total_temp % resi_temp;}else if(last_ysf=='+')total = total+number_temp;else if(last_ysf=='-')total = total-number_temp;elsetotal = number_temp;last_ysf='%';                    //记录本次的运算符号ui->temp->clear();
}void Widget::on_one_pb_clicked()    //1
{ui->lineEdit->insert("1");ui->temp->insert("1");
}void Widget::on_two_pb_clicked()  // 2
{ui->lineEdit->insert("2");ui->temp->insert("2");
}void Widget::on_three_pb_clicked() //3
{ui->lineEdit->insert("3");ui->temp->insert("3");
}void Widget::on_four_pb_clicked() //4
{ui->lineEdit->insert("4");ui->temp->insert("4");
}void Widget::on_five_pb_clicked()  //5
{ui->lineEdit->insert("5");ui->temp->insert("5");
}void Widget::on_six_pb_clicked()  //6
{ui->lineEdit->insert("6");ui->temp->insert("6");
}void Widget::on_seven_pb_clicked()  //7
{ui->lineEdit->insert("7");ui->temp->insert("7");
}void Widget::on_eight_pb_clicked()  //8
{ui->lineEdit->insert("8");ui->temp->insert("8");
}void Widget::on_nine_pb_clicked()  //9
{ui->lineEdit->insert("9");ui->temp->insert("9");
}void Widget::on_zero_pb_clicked()  //0
{ui->lineEdit->insert("0");ui->temp->insert("0");
}void Widget::on_dot_pb_clicked()  // .
{ui->lineEdit->insert(".");ui->temp->insert(".");
}void Widget::on_clear_pb_clicked() //清除
{ui->lineEdit->clear();ui->temp->clear();ui->result->clear();total=0;
}void Widget::on_delete_pb_clicked() //退格
{uint8_t index;QString str;index=ui->lineEdit->text().length();str=ui->lineEdit->text();str.remove(index-1,1);        //去除末尾一个字符ui->lineEdit->setText(str);uint8_t index2;QString str2;index2=ui->temp->text().length();str2=ui->temp->text();str2.remove(index2-1,1);        //去除末尾一个字符ui->temp->setText(str2);
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Redis]——Redis持久化的两种方式RDB、AOF

目录 RDB快照模式 概念&#xff1a; 触发时机&#xff1a; 异步做快照 AOF追加模式 概念&#xff1a; 触发时机&#xff1a; bgrewriteaof命令&#xff1a; 比较两种模式&#xff1a; RDB快照模式 概念&#xff1a; RDB模式就是保存当前Redis的状态到本地磁盘文件&am…

kubeadm部署Kubernetes(k8s) 1.23.0高可用集群

Kubernetes介绍 kubernetes(k8s)是2015年由Google公司基于Go语言编写的一款开源的容器集群编排系统,用于自动化容器的部署、扩缩容和管理; kubernetes(k8s)是基于Google内部的Borg系统的特征开发的一个版本,集成了Borg系统大部分优势; 官方地址:https://Kubernetes…

AttributeError: cannot assign module before Module.__init__() call

原因 调用了自定义的类&#xff0c;但是在自定义的类的__init__函数下面没有写super( XXX, self ).init() 错误案例 import torch import torch.nn as nnclass SelfAttention(nn.Module):""" Self-Attention """def __init__(self, n_head, d…

HTML5打开本地app应用的方法

大家好我是咕噜美乐蒂&#xff0c;很高兴又和大家见面了&#xff01; 打开本地应用程序是一种常见的需求&#xff0c;特别是在Web应用程序需要与本地设备或应用程序进行交互时。HTML5并不直接支持通过Web页面直接打开本地应用程序&#xff0c;但可以通过一些间接的方式实现这一…

【vue.js】文档解读【day 4】 | 事件处理

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 文章目录 事件处理前言监听事件内联事件处理器方法事件处理器方法与内联事件判断在内联处理器中调用方法在内联事件处理器中访问事件参数修饰符事件修饰符按键修饰符常规按键别名系统按键别名组合按键ex…

3d场景重建图像渲染 | 神经辐射场NeRF(Neural Radiance Fields)

神经辐射场NeRF&#xff08;Neural Radiance Fields&#xff09; 概念 NeRF&#xff08;Neural Radiance Fields&#xff0c;神经辐射场&#xff09;是一种用于3D场景重建和图像渲染的深度学习方法。它由Ben Mildenhall等人在2020年的论文《NeRF: Representing Scenes as Neur…

TVM_深度学习编译器

TVM_深度学习编译器 TVM所做的是要比传统compiler更偏上层的&#xff0c;你可以把它理解成source-to-source compiler&#xff0c;需要其他的后端(backend)来生成最后的指令。比如当编译的Target是Intel CPU时&#xff0c;翻译的顺序是Relay IR -> TVM IR/ Halide IR ->…

一、C#冒泡排序算法

一、C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法&#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大&#xff08;或最小&#xff09;的元素逐步"冒泡"到数列的末尾。 实现原理 冒泡排序是一种简单的排序算法&#xff0c;其…

CSS Module

CSS Module的作用&#xff1a;将CSS样式作用域限制在特定的组件范围内&#xff0c;以避免全局样式污染和命名冲突。 Vue中如何实现样式模块…

【TB作品】MSP430单片机,音乐播放器,四首音乐,八音盒,Proteus仿真

文章目录 题目要求仿真结果实验报告&#xff1a;基于MSP430单片机的八音盒设计实验目的实验设备实验原理总结 代码和仿真图 题目要求 八音盒 本设计利用MSP430单片机结合内部定时器及LED/LCD,设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。 基本要求: 使用LED/LCD显示器…

JAVA基础:数组、重载、数据类型、封装、字符串、静态、继承、重写、多态、代码块、权限、接口、内部类

1 数组 //静态初始化 int[] arr1new int[]{1,2,3,4} //简化形式 int[] arr2{1,2,3,4} //动态初始化 int[] arr3new int[5] 2 方法重载 在同一个类中的多个方法的方法名相同,参数个数不同&#xff0c;参数类型不同&#xff0c;参数类型顺序不同 public class Test1 {public …

【javaWeb】在webapp中手动发布一个应用

标题 &#x1f432;一、为什么要在webapp中手动发布一个应用&#x1f389;二、手动发布步骤1.下载Tomcat2.解压并安装3.在webapps中创建文档 ✨三、总结 &#x1f432;一、为什么要在webapp中手动发布一个应用 好处解释灵活性手动发布应用程序可以根据自己的需求进行自定义配置…

2.24计组碎片

op(a1)说的是对a1存的数&#xff0c;即&#xff08;a1)&#xff0c;进行op操作 访存说的是访问、读写主存&#xff0c;如果是写在寄存器上&#xff0c;就不需要访存 对于C就是说&#xff0c;如果是1100-1110的话&#xff0c;就可以对应取到0000-1111&#xff0c;如果是下面那个…

css性能优化的方法?

CSS 优化在网页性能和用户体验中起着重要作用。以下是一些常见的 CSS 优化方法&#xff1a; 合并和压缩CSS文件&#xff1a; 将多个 CSS 文件合并为一个文件&#xff0c;并对其进行压缩&#xff0c;可以减少 HTTP 请求次数和文件大小&#xff0c;加快页面加载速度。 使用CSS预处…

全面解析 LoRA、QLoRA、RLHF,PPO,DPO,Flash Attention、增量学习等大模型算法

随着大模型的飞速发展&#xff0c;在短短一年间就有了大幅度的技术迭代更新&#xff0c;从LoRA、QLoRA、AdaLoRa、ZeroQuant、Flash Attention、KTO、蒸馏技术到模型增量学习、数据处理、新的开源模型的理解等&#xff0c;几乎每天都有新的发展。 作为算法工程师&#xff0c;面…

【Linux】文本替换Ubuntu 中 sed 指令的使用指南

没什么 大愿望 没有什么事 要赶 看见路口红灯 一直闪 它像 眨眼的小太阳 乌云还 挺大胆 顶在头上 吹不散 我抓在手里 捏成棉花糖 什么烦恼 不能忘 既然 是路一定有转弯 哪个风景 都漂亮 &#x1f3b5; 周深《小美满》 在 Ubuntu&#xff08;或其他类 Unix…

09.JavaScript中的深浅拷贝和异常处理

一、深浅拷贝 1.浅拷贝 首先浅拷贝和深拷贝只针对引用类型 浅拷贝&#xff1a;拷贝的是地址 常见方法&#xff1a; 拷贝对象&#xff1a;Object.assgin() / 展开运算符 {…obj} 拷贝对象拷贝数组&#xff1a;Array.prototype.concat() 或者 […arr] 如果是简单数据类型拷贝…

pdfgear:免费易用的pdf处理软件,轻松进行pdf文件转换、阅读、编辑等

名人说:东边日出西边雨,道是无晴却有晴。——刘禹锡 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、软件介绍①pdfgear②核心功能③PDFgear的优势二、下载安装①下载②安装三、使用方法①阅读②pdf编辑③pdf转换四、总结

Spring状态机简单实现

一、什么是状态机 状态机&#xff0c;又称有限状态自动机&#xff0c;是表示有限个状态以及在这些状态之间的转移和动作等行为的计算模型。状态机的概念其实可以应用的各种领域&#xff0c;包括电子工程、语言学、哲学、生物学、数学和逻辑学等&#xff0c;例如日常生活中的电…

基于单片机的恒压供水控制器设计

摘 要 随着我国现代化的进程不断加快&#xff0c;城市居民生活水平不断提高&#xff0c;随之而来的是房屋的翻新和重建&#xff0c;但建筑层数的不断增高&#xff0c;使得供水所需压力不断提高&#xff0c;若建筑设计时对压力判断不足&#xff0c;会导致供水时无法供应到高楼层…