#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.hqwc.cn/news/539703.html

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

相关文章

code摘录日记[矩阵变元素,变列向量,3D表面图,table行列设置] Matlab

矩阵变元素&#xff0c;变列向量 W1(Z1 < Z2) nan; % Z1,Z2 all matrix,Only plot points where Z1 > Z2;Z1 < Z2位置值填为NaNx x(:); % Now x is a 30-by-1 vector; matrix变列vector技巧3D表面图 hand figure; % Handle to the figure, for more plotting later…

XUbuntu22.04之关闭todesk开机自启动(二百二十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

C语言-strcmp(对比函数模拟和使用)

strcmp&#xff08;对比函数模拟和使用&#xff09; strcmp的语法 字符串的比较目的 这里比如你写一个网站&#xff0c;对照自己的用户和密码进行对比 使用(对比)方式 strcmp&#xff08;arr1&#xff0c;arr2&#xff09; 常量 arr1这里是常量 数组名是个地址所以是拷贝 …

QT网络编程之实现UDP广播发送和接收

推荐一个不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;内容全面&#xff0c;作为入门科普和学习提升都不错&#xff0c;分享一下给大家&#xff1a;前言https://www.captainbed.cn/ai 一.UDP通信 1.QT中实现UDP通信主要用到了以下类&#xff1a;QUdpSocket、QHost…

Spring Boot 集成 WebSocket 实例 | 前端持续打印远程日志文件更新内容(模拟 tail 命令)

这个是我在 CSDN 的第一百篇原则博文&#xff0c;留念&#x1f60e; #1 需求说明 先说下项目结构&#xff0c;后端基于 Spring Boot 3&#xff0c;前端为 node.js 开发的控制台程序。现在希望能够在前端模拟 tail 命令&#xff0c;持续输出后端的日志文件。 #2 技术方案 #2.…

Ansible自动化运维Inventory与Ad-Hoc

前言 自动化运维是指利用自动化工具和技术来简化、自动化和优化IT基础设施的管理和运维过程&#xff0c;从而提高效率、降低成本&#xff0c;并减少人为错误。在当今复杂的IT环境中&#xff0c;自动化运维已经成为许多组织和企业提高生产力和保证系统稳定性的重要手段。Ansibl…

react native常用插件

react-native-async-storage/async-storage 说明&#xff1a;AsyncStorage 是一个在 react-native 中轻量存储的库&#xff1b;跟 localStorage 类似&#xff0c;API 也几乎一样&#xff1b;存储的时候需要将存储内容转成字符串存储。 react-navigation/material-bottom-tabs …

SwiftUI的textfile

SwiftUI的textfile 记录一下SwiftUI的textfile的基本使用方法 import SwiftUIstruct TextfileBootCamp: View {State var enterString ""State var enterList [String]()var body: some View {NavigationView(content: {VStack {/// 双向绑定输入的字符TextField(…

泽众云真机-机型支持ADB调试功能即将上线

最近云真机平台在线客服&#xff0c;收到很多咨询关于ADB调试功能&#xff0c;什么时候能更新&#xff1f;据小编所知&#xff0c;正在升级之中&#xff0c;有一块专门为了解决ADB调试功能提前准备&#xff0c;升级网络硬件设备&#xff0c;目前平台的功能已开发完成&#xff0…

使用docker-compose部署MySQL三主六从半同步集群(MMM架构)

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容部署MySQL三主六从半同步集群一主二从同步集群规划需要安装docker和docker-compose命令形式安装安装docker安装docker-compose 宝塔面板形式安装 部署node1节点的master1docker-compose.yaml文件my.cnf文件授权启动 部署no…

C# danbooru Stable Diffusion 提示词反推 Onnx Demo

目录 说明 效果 模型信息 项目 代码 下载 C# danbooru Stable Diffusion 提示词反推 Onnx Demo 说明 模型下载地址&#xff1a;https://huggingface.co/deepghs/ml-danbooru-onnx 效果 模型信息 Model Properties ------------------------- ----------------------…

OpenvSwitch VXLAN 隧道实验

OpenvSwitch VXLAN 隧道实验 最近在了解 openstack 网络&#xff0c;下面基于ubuntu虚拟机安装OpenvSwitch&#xff0c;测试vxlan的基本配置。 节点信息&#xff1a; 主机名IP地址OS网卡node1192.168.95.11Ubuntu 22.04ens33node2192.168.95.12Ubuntu 22.04ens33 网卡信息&…