#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_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    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;
    else
        total = 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;
    else
        total = 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;
    else
        total = 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;
    else
        total = 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;
    else
        total = 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.mfbz.cn/a/457459.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux安全--Nginx与Tomcat实现负载均衡

目录 1.实验拓扑原理图&#xff0c;前提实现全网互通 2.找到nginx的conf目录中的nginx.conf文件 3.实验效果 1.实验拓扑原理图&#xff0c;前提实现全网互通 搭建全网互通可以看https://blog.csdn.net/m0_74313947/article/details/136008513?spm1001.2014.3001.5501 搭建N…

JavaEE之多线程(创建线程的五种写法)详解

&#x1f63d;博主CSDN主页: 小源_&#x1f63d; &#x1f58b;️个人专栏: JavaEE &#x1f600;努力追逐大佬们的步伐~ 目录 1. 前言 2. 操作系统"内核" 3. 创建线程的五种写法 (我们重点要掌握最后一种写法!!) 3.1 继承 Thread, 重写 run 3. 2 实现 Runnabl…

北京保险服务中心携手镜舟科技,助推新能源车险市场规范化

2022 年&#xff0c;一辆新能源汽车在泥泞的小路上不慎拖底&#xff0c;动力电池底壳受损&#xff0c;电池电量低。车主向保险公司报案&#xff0c;希望能够得到赔偿。然而&#xff0c;在定损过程中&#xff0c;保司发现这辆车的电池故障并非由拖底事件引起&#xff0c;而是由于…

电脑坏了去维修,第一家报价800,第三家说报废!

这篇文章主要讲的是修理坏掉的电脑。 第一家报价300&#xff0c;第二家报价800&#xff0c;第三家说要报废&#xff01; 相信很多朋友对于修电脑坏了要多少钱有很多困惑&#xff0c;修电脑坏了要多少钱&#xff0c;到底去正规售后服务还是去非品牌店维修一台坏掉的电脑。 今天高…

基于单片机的电子琴设计

基于单片机的电子琴设计 摘 要 读书、看电影、听音乐&#xff0c;都是最常见的丰富内心世界的良剂。听音乐&#xff0c;作为陶冶情操、提升境界最便捷的方式&#xff0c;正受到越来越多人们的欢迎。音乐可以很轻松的融入各种场合&#xff0c;给人们带来很轻松的氛围&#xff…

基础---nginx 启动不了,跟 Apache2 服务冲突

文章目录 查看 nginx 服务状态nginx 启动后 访问页面 127.0.0.1停止 nginx 服务&#xff0c;访问不了页面停止/启动 Apache2 服务&#xff0c;启动 Apache2 页面访问显示正确nginx 莫名启动不了卸载 Apache2 服务器 启动 nginx &#xff0c;但是总是不能实现反向代理&#xff0…

微服务分布式springcloud的体育场地预约系统演kdm1z

体育场馆设施预约系统是在实际应用和软件工程的开发原理之上&#xff0c;运用java语言以及Springcloud框架进行开发。首先要进行需求分析&#xff0c;分析出体育场馆设施预约系统的主要功能&#xff0c;然后设计了系统结构。整体设计包括系统的功能、系统总体结构、系统数据结构…

Annaconda环境下ChromeDriver配置及爬虫编写

Anaconda环境的chromedriver安装配置_anaconda 配置chromedriver-CSDN博客 Chromedriver驱动( 121.0.6167.85 ) - 知乎 下载好的驱动文件解压&#xff0c;将exe程序复制到Annaconda/Scripts目录以及Chrome/Application目录下 注意要提前pip install selenium包才能运行成功&a…

若依Vue3图片预览大图遮罩层和表格的border css层级冲突

样式层级出现问题&#xff0c;表格的层级高于图片的层级 1.解决方式一&#xff1a;设置此文件的该属性&#xff08;z-index&#xff09;为继承&#xff0c;则显示正常 .el-table .el-table__cell { z-index: inherit; } 2.解决方式二&#xff1a;将此属性设置为true(本人试了…

【Python】快捷找到最大最小 N 个元素

heapq 简单数据结构取出最大最小N个元素复杂数据结构中取出最大最小N个元素代码解析&#xff1a;lambda Python 中有 heapq 模块可以快捷找到数组中最大最小的 N 个元素&#xff1b; heapq.nlargest(num, arr) # 从arr数组中取出最大num个元素 heapq.nsmallest(num, arr) # …

[论文笔记]LLaMA: Open and Efficient Foundation Language Models

引言 今天带来经典论文 LLaMA: Open and Efficient Foundation Language Models 的笔记&#xff0c;论文标题翻译过来就是 LLaMA:开放和高效的基础语言模型。 LLaMA提供了不可多得的大模型开发思路&#xff0c;为很多国产化大模型打开了一片新的天地&#xff0c;论文和代码值…

npm报错,显示certificate has expired

从报错信息就可以知道是因为之前设置的淘宝镜像已过期&#xff0c;解决方法就是要把之前设置的淘宝镜像改成新的 第一种方法 第一步&#xff1a;清空缓存 npm cache clean --force第二步&#xff1a;重新设置新的镜像源 npm config set registry https://registry.npmmirror…

使用canvas实现图纸标记及回显

图纸 图纸标记后的效果图 最近做的一个qms项目里面&#xff0c;需要前端在图纸上实现标记及标记后的内容还要能够回显&#xff0c;然后后端通过标记的点&#xff0c;去读取标记图纸的内容&#xff0c;如一些公式、数据之类的&#xff0c;目前实现的功能有 在图纸上面进行矩形…

点云配准论文阅读1-Research on Three-Dimensional Point Cloud Registration Algorithm

Research on Three-Dimensional Point Cloud Registration Algorithm三维点云配准算法研究 Publisher: IEEE发行者 &#xff1a; IEEE Cite This引用此内容 PDF Yuqing Zhang; Shilong Sun; Jingjing Shang; Minghan Yang张玉清;孙世龙; 尚晶晶;杨明翰 Abstract: Accordi…

88. 合并两个有序数组 (Swift版本)

题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。 注意&#xff1a;最终&#xff0c;合并…

【C++ 设计模式】简单工厂模式

文章目录 前言一、简单工厂模式是什么&#xff1f;二、实现原理三、UML类图四、简单工厂模式具体代码总结 前言 在软件开发中&#xff0c;设计模式是解决特定问题的可复用解决方案。其中&#xff0c;简单工厂模式是一种创建型设计模式&#xff0c;旨在封装对象的创建过程&…

Python数学建模-2.3函数(下)

2.3.2模块的导入与使用 模块在Python中是一个包含Python定义和语句的文件&#xff0c;通常用来组织代码&#xff0c;使得代码更易于管理和复用。下面&#xff0c;我将详细讲解Python函数中模块的使用知识。 1. 模块的导入 在Python中&#xff0c;你可以使用import语句来导入…

PyCharm创建一个简单的Django项目

1.Django简介 Django 是一个开放源代码的 Web 应用程序框架&#xff0c;由 Python 编写而成。它遵循 MVC&#xff08;模型-视图-控制器&#xff09;的软件设计模式&#xff0c;采用了 MTV&#xff08;模型-模板-视图&#xff09;的架构。Django 的设计目标是使开发复杂的、数据…

java maven聚合项目-子项目重写父项目的依赖版本无法生效

前言 项目的springboot版本2.6.13 项目主pom 引入了springboot的依赖配置 <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><…

华为OD技术C卷“测试用例执行计划”Java解答

描述 示例 算法思路1 整体思路是&#xff0c;先读取特性的优先级和测试用例覆盖的特性列表&#xff0c;然后计算每个测试用例的优先级&#xff0c;并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序&#xff0c;输出测试用例的索引&#xff0c;即为执行顺序。…