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

news2024/9/17 8:23:00

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.coloradmin.cn/o/1516538.html

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

相关文章

服务器集群 -- nginx配置tcp负载均衡

当面临高流量、高可用性、水平扩展、会话保持或跨地域流量分发等需求时&#xff0c;单台服务器受限于硬件资源、性能有限不能满足应用场景的并发需求量时&#xff0c;引入负载均衡器部署多个服务器共同处理客户端的并发请求&#xff0c;可以帮助优化系统架构&#xff0c;提高系…

【CSP试题回顾】201712-2-游戏

CSP-201712-2-游戏 解题思路 代码实现了一个模拟游戏过程的算法&#xff0c;其中n个小朋友围成一圈&#xff0c;按照顺时针方向依次编号从1到n&#xff0c;然后按顺时针方向依次报数。每当报的数是k的倍数或者个位数是k时&#xff0c;报数的小朋友会被淘汰。游戏继续进行&…

关于使用elementUI中select和el-checkbox-group的回显问题

网上看到很关于这个的问题回显&#xff0c;各式各样&#xff0c;没有绝句自己的问题&#xff0c;总重问题出在数据格式上 select和el-checkbox-group el-checkbox 都是字符串数组格式&#xff1a;[12,13,....]; 我写的格式是id是选中的id组成的回显数据格式&#xff1b; 如…

【爬虫】requests.post请求中的data和json使用区别

请求体是键值对形式&#xff08;无花括号&#xff09;&#xff0c;请求时需要使用data参数处理。 代码&#xff1a; data {...} ret requests.post(url, headersheaders, datadata)请求体是字典形式&#xff08;有花括号&#xff09;&#xff0c;请求时需要使用json参数处理。…

第16届大广赛XPPen都有哪些参赛命题

截至到发文时间&#xff0c;2024年3月14日&#xff0c;第16届大广赛已经累计公布了6个品牌命题&#xff0c;本文就给大家介绍一下XPPen命题的详细细节。 XPPen为汉王友基旗下全球知名数字艺术创新品牌&#xff0c;专注消费级用户创作需求&#xff0c;品牌产品覆盖全球160多个国…

C/C++中strcpy,strcat,strstr以及strncpy,strncat,strncmp的使用

1、首先我们来介绍strcpy的使用从这个函数的名字来看它应该是属于字符串的拷贝&#xff0c;string copy。 那么这个函数是怎么用的呢&#xff1f;下面我么来介绍她的基本结构。 char * strcpy ( char * destination, const char * source );由上述可知它需要两部分 一个是目标字…

如何在CentOS7搭建DashDot服务器仪表盘并实现远程监控

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用3. 本地访问DashDot服务4. 安装cpolar内网穿透5. 固定DashDot公网地址 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘&#xff0c;并且结合cpolar内网穿透工具可以实现公网实时监测服务…

【Python】新手入门学习:详细介绍里氏替换原则(LSP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍里氏替换原则&#xff08;LSP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

ArcGIS学习(十五)用地适宜性评价

ArcGIS学习(十五)用地适宜性评价 本任务给大家带来的内容是用地适宜性评价。 用地适宜性评价是大家在平时工作中最常接触到的分析场景之一。尤其是在国土空间规划的大背景下,用地适宜性评价变得越来越重要。 此外,我们之前的任务主要是使用矢量数据进行分析。本案例是主讲…

vs2022 错误(活动) E1696 无法打开 源 文件 “bits/stdc++.h“解决办法

一、创建stdc.h的头文件 随便找一个项目->添加->新建项->头文件->命名为stdc.h->添加 二、复制下述代码->保存 ​ // C includes used for precompiling -*- C -*-// Copyright (C) 2003-2017 Free Software Foundation, Inc. // // This file is part of …

镭雕机:如何利用激光技术实现高质量的产品标记

镭雕机是一种利用激光技术实现高质量产品标记的设备。它通过激光束在各种不同的物质表面进行精确的打标&#xff0c;可以产生永久性的标记效果&#xff0c;这些标记不仅精美&#xff0c;而且具有高度的精度和清晰度。以下是镭雕机如何利用激光技术实现高质量产品标记的详细过程…

java枚举与模拟方法

枚举 枚举的定义 枚举算法&#xff08;穷举算法&#xff09;&#xff0c;这种算法就是在解决实际问题的时候去使用所有的方式去解决这个问题&#xff0c;会通过推理去考虑事件发生的每一种可能性&#xff0c;最后推导出结果 优点 简单粗暴&#xff0c;他暴力的枚举所有可能&…

Unity之PUN实现多人联机射击游戏的优化

目录 &#x1f3ae;一、 跳跃&#xff0c;加速跑 &#x1f3ae;二、玩家自定义输入昵称 &#x1f345;2.1 给昵称赋值 &#x1f345;2.2 实现 &#x1f3ae;三、玩家昵称同步到房间列表 &#x1f345;3.1 获取全部玩家 &#x1f345;3.2 自定义Player中的字段 &#…

【代码随想录 | 数组 03】有序数组的平方

文章目录 3.有序数组的平方3.1题目3.2思路3.2.1暴力解法3.2.2双指针法 3.有序数组的平方 3.1题目 977.有序数组的平方——力扣题目链接 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示…

Python 3.6.6安装方法(保留环境中python2不受影响)

前言&#xff1a;因为Linux系统下自带了python2的版本&#xff0c;所以我们要用Python3的话需要自己构建安装。并保证某些已经存在的服务可以正常使用python2。 具体步骤如下&#xff1a; 一、python3.6.6 安装 1.安装依赖包&#xff1a; yum -y install zlib zlib-devel yu…

借助资本力量创业:企业扩张能力、融资方式及创投公司投资条款的考量

在创业的道路上&#xff0c;借助资本的力量是许多企业实现快速扩张和持续发展的重要途径。然而&#xff0c;如何有效利用资本&#xff0c;确保企业在扩张过程中稳健前行&#xff0c;就需要创业者对企业扩张能力、融资方式以及创投公司的投资条款进行深入理解和审慎考量。 一、企…

LeetCode28.找出字符串中第一个匹配项

28.找出字符串中第一个匹配项 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入…

QT 如何在QPushButton上播放gif(终极版)

在平时浏览网站&#xff0c;或者使用软件的时候&#xff0c;经常可以见到&#xff1a;在点击了某个按钮之后&#xff0c;按钮上会显示动图以及提示文字。在QT中&#xff0c;比较常见且简单的做法就是&#xff1a;给按钮设置一个layout&#xff0c;然后在这个layout里面添加QLab…

ListBox显示图片的一些问题

相关&#xff1a;http://t.csdnimg.cn/xTnu8 显示图片的方案就是&#xff1a;自定义一个Photo类&#xff0c;里面有属性Source&#xff1b;View再绑定ViewModel中的Photo集合&#xff0c;再到View中给ListView设置数据模板 关键点&#xff1a;这样做很容易忘记写数据模板 数据…

4款实用性前端动画特效分享(附在线演示)

分享4款非常不错的项目动画特效 其中有jQuery特效、canvas特效、CSS动画等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 全屏图片视差旋转切换特效 基于anime.js制作全屏响应式的图片元素布局&#xff0c;通过左…