基于QT的科学计算器

基于Qt的科学计算器

本次科学计算的设计,我仿照win 10系统自带的科学计算器,完成相应的功能,能实现加减乘除,乘方开方,三角函数,二进制转换等功能。
在Qt4,Qt5版本下都可以运行。
效果图如下:在这里插入图片描述
设计思路:
在这里插入图片描述

代码如下:

  /* Mainwindow.h文件*/

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLineEdit>
#include <QSystemTrayIcon>
#include <QPushButton>
#include <QGridLayout>
#include <QWidget>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    bool waittingForOperand;
    bool addOperator;                                //加法操作符
    bool minOperator;                                //减法操作符
    bool mulOperator;                                //乘法操作符
    bool divOperator;                                //除法操作符
    bool XYOperator;                                 //X的Y次方操作符
    bool modOperator;                                //余数操作符
    bool operatorFlag;                               //操作符标志
    bool calculate(double operand, const QString &operatorAct);
    bool calculate(double operand);




void abortOperation();
    double value;
    double result;

private slots:
    void buttonDigitalClicked();                        //数字按键
    void buttonNegativeClicked();                       //正负号切换
    void buttonSinClicked();                            //三角函数sin
    void buttonCosClicked();                            //三角函数cos
    void buttonTanClicked();                            //三角函数tan
    void buttonBINClicked();                           //十进制转二进制
    void buttonAbsClicked();                            //绝对值
    void buttonSqrtClicked();                           //开方
    void buttonPowClicked();                            //平方
    void buttonXClicked();                              //倒数
    void buttonXYClicked();                             //X的Y次方
    void buttonModClicked();                            //取余
    void buttonEqualClicked();                          //等
    void buttonAddClicked();                            //加法
    void buttonMinClicked();                            //减法
    void buttonMulClicked();                            //乘法
    void buttonDivClicked();                            //除法
    void buttonPointClicked();                          //小数点
    void buttonPIClicked();                             //PI
    void buttonDelClicked();                            //回退
    void buttonClearClicked();                          //清空




};

#endif  //MAINWINDOW_H




//Mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "cmath"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //窗体属性设置
    this->setWindowTitle("calculator");                     //设置窗体标题
    this->setMaximumSize(421,486);                          //窗体最大尺寸
    this->setMinimumSize(421,486);                          //窗体最小尺寸
    this->setWindowIcon(QIcon(":/timg.jpg"));       //窗体图标

    //参数的初始化
    waittingForOperand = true;                      //等待操作数
    result = 0.0;
    value = 0.0;
    operatorFlag = false;
    modOperator = false;
    XYOperator = false;
    addOperator = false;
    minOperator = false;
    mulOperator = false;
    divOperator = false;

    //数字按键绑定
    connect(ui->buttonDigital0, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
    connect(ui->buttonDigital1, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
    connect(ui->buttonDigital2, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
    connect(ui->buttonDigital3, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
    connect(ui->buttonDigital4, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
    connect(ui->buttonDigital5, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));

connect(ui->buttonDigital6, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
    connect(ui->buttonDigital7, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
    connect(ui->buttonDigital8, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
    connect(ui->buttonDigital9, SIGNAL(clicked()), this, SLOT(buttonDigitalClicked()));
connect(ui->buttonNega,SIGNAL(clicked()),this,SLOT(buttonNegativeClicked()));  //正负符号切换

    connect(ui->buttonSin,SIGNAL(clicked()), this, SLOT(buttonSinClicked())); //三角函数sin
    connect(ui->buttonCos,SIGNAL(clicked()), this, SLOT(buttonCosClicked())); //三角函数cos
    connect(ui->buttonTan,SIGNAL(clicked()), this, SLOT(buttonTanClicked())); //三角函数tan
    connect(ui->buttonBIN, SIGNAL(clicked()), this, SLOT(buttonBINClicked()));//十进制转二进制
    connect(ui->buttonAbs,SIGNAL(clicked()), this, SLOT(buttonAbsClicked())); //绝对值
    connect(ui->buttonSqrt, SIGNAL(clicked()), this, SLOT(buttonSqrtClicked()));//开方
    connect(ui->buttonPow, SIGNAL(clicked()), this, SLOT(buttonPowClicked()));//平方
    connect(ui->buttonX, SIGNAL(clicked()), this, SLOT(buttonXClicked()));//倒数
    connect(ui->buttonXY, SIGNAL(clicked()), this, SLOT(buttonXYClicked()));//x的y次方
    connect(ui->buttonMod, SIGNAL(clicked()), this, SLOT(buttonModClicked()));//取余
    connect(ui->buttonEqual, SIGNAL(clicked()), this, SLOT(buttonEqualClicked()));//等于

    //加减乘除
    connect(ui->buttonAdd, SIGNAL(clicked()), this, SLOT(buttonAddClicked()));
    connect(ui->buttonMin, SIGNAL(clicked()), this, SLOT(buttonMinClicked()));
    connect(ui->buttonMul, SIGNAL(clicked()), this, SLOT(buttonMulClicked()));
    connect(ui->buttonDiv, SIGNAL(clicked()), this, SLOT(buttonDivClicked()));

    connect(ui->buttonPoint, SIGNAL(clicked()), this, SLOT(buttonPointClicked()));//小数点
    connect(ui->buttonPI, SIGNAL(clicked()), this, SLOT(buttonPIClicked()));//pai
    connect(ui->buttonDel, SIGNAL(clicked()), this, SLOT(buttonDelClicked()));//回退

  connect(ui->buttonClear, SIGNAL(clicked()), this, SLOT(buttonClearClicked()));//清空
    ui->display->setAlignment(Qt::AlignRight);              //靠右显示
    ui->display->setReadOnly(true);                         //只读模式
    ui-> display->setMinimumHeight(50);
    ui->display->setText("0");//初始化为0
}    
    
MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::buttonDigitalClicked()//数字按键输入数字
{
    QPushButton *buttonClicked = qobject_cast<QPushButton *>(sender());     //判断是那个键值被摁下
    int buttonValue = buttonClicked->text().toInt();                        //将键值转化为整型赋值给value

    if(waittingForOperand)
    {
        ui->display->clear();
        waittingForOperand = false;
    }
    ui->display->setText(ui->display->text()+QString::number(buttonValue));         //计算器显示之前的值加上现在的值
}

void MainWindow::buttonNegativeClicked()//负号
{
    if(operatorFlag)
        return;
    else
    {
        double text = ui->display->text().toDouble();
        text = -text;
        ui->display->setText(QString::number(text));
        waittingForOperand = true;
    }
}

void MainWindow::buttonSinClicked()//三角函数sin

{
    if(operatorFlag)
        return;
    else
    {
        double text = ui->display->text().toDouble();
        text = std::sin(text*3.141592654/180);
        ui->display->setText(QString::number(text));
    }
    waittingForOperand = true;
}

void MainWindow::buttonCosClicked()//三角函数cos
{
    if(operatorFlag)
        return;
    else
    {
        double text = ui->display->text().toDouble();
        text = std::cos(text*3.141592654/180);
        ui->display->setText(QString::number(text));
    }
    waittingForOperand = true;
}

void MainWindow::buttonTanClicked()//三角函数tan
{
    if(operatorFlag)
        return;
    else
    {
        double text = ui->display->text().toDouble();
        text = std::tan(text*3.141592654/180);
        ui->display->setText(QString::number(text));
    }
    waittingForOperand = true;
}

void MainWindow::buttonBINClicked()//十进制转二进制
{
    if(operatorFlag)
        return;
    else
    {

 int text = ui->display->text().toInt();
        QString str="";
        while (text!=0) {
            str = QString::number(text % 2) + str;
            text = text/ 2;
      }
       ui->display->setText(str);
    }
    waittingForOperand = true;
}

void MainWindow::buttonAbsClicked()//绝对值
{
    if(operatorFlag)
        return;
    else
    {
        double text = ui->display->text().toDouble();
        text = std::fabs(text);
        ui->display->setText(QString::number(text));
    }
    waittingForOperand = true;
}

void MainWindow::buttonSqrtClicked()//开方
{
    if(operatorFlag)
        return;
    else
    {
        double text = ui->display->text().toDouble();
        if(text < 0)
            abortOperation();
        else
        {
            text = std::sqrt(text);
            ui->display->setText(QString::number(text));
        }
    }
    waittingForOperand = true;
}

void MainWindow::buttonPowClicked()//平方
{

 if(operatorFlag)
        return;
    else
    {
        double text = ui->display->text().toDouble();
        text = std::pow(text,2);
        ui->display->setText(QString::number(text));
    }
    waittingForOperand = true;
}

void MainWindow::buttonXClicked()//倒数
{
    if(operatorFlag)
        return;
    else
    {
        double text = ui->display->text().toDouble();
        if(text == 0.0)
            abortOperation();
        else
        {
            text = 1/text;
            ui->display->setText(QString::number(text));
            waittingForOperand = true;
        }
    }
}
void MainWindow::buttonXYClicked()//X的Y次方
{
    if(!operatorFlag)
    {
        result = ui->display->text().toDouble();
        operatorFlag = true;
        waittingForOperand = true;
    }
    else
    {
        value = ui->display->text().toDouble();
        if(calculate(value)==false)
        {
            abortOperation();
        }
    }

  XYOperator = true;
}

void MainWindow::buttonModClicked()//取余
{
    if(!operatorFlag)
    {
        result = ui->display->text().toDouble();
        operatorFlag = true;
        waittingForOperand = true;
    }
    else
    {
        value = ui->display->text().toDouble();
        if(calculate(value)==false)
        {
            abortOperation();
        }
    }
    modOperator = true;
}

void MainWindow::buttonEqualClicked()//等于
{

    if(!operatorFlag)
        return;
    else
    {
        value = ui->display->text().toDouble();
        if(calculate(value)==false)
        {
            abortOperation();
        }
        waittingForOperand = true;
        operatorFlag = false;
    }
}



void MainWindow::buttonAddClicked()//加
{
    if(!operatorFlag)

 {
        result = ui->display->text().toDouble();
        operatorFlag = true;
        waittingForOperand = true;
    }
    else
    {
        value = ui->display->text().toDouble();
        if(calculate(value)==false)
        {
            abortOperation();
        }
    }
    addOperator = true;
}

void MainWindow::buttonMinClicked()//减
{
    if(!operatorFlag)
    {
        result = ui->display->text().toDouble();
        operatorFlag = true;
        waittingForOperand = true;
    }
    else
    {
        value = ui->display->text().toDouble();
        if(calculate(value)==false)
        {
            abortOperation();
        }
    }
    minOperator = true;
}

void MainWindow::buttonMulClicked()//乘
{
    if(!operatorFlag)
    {
        result = ui->display->text().toDouble();
        operatorFlag = true;
        waittingForOperand = true;
    }
    else

 {
        value = ui->display->text().toDouble();
        if(calculate(value)==false)
        {
            abortOperation();
        }
    }
    mulOperator = true;
}

void MainWindow::buttonDivClicked()//除
{
    if(!operatorFlag)
    {
        result = ui->display->text().toDouble();
        operatorFlag = true;
        waittingForOperand = true;
    }
    else
    {
        value = ui->display->text().toDouble();
        if(calculate(value)==false)
        {
            abortOperation();
        }
    }
    divOperator = true;
}

void MainWindow::buttonPointClicked()//小数点
{
    //首先判断当前显示内容是否已经包含“.”符号
    if(ui->display->text().contains('.'))
        return;
    else
        ui->display->setText(ui->display->text()+tr("."));
}

void MainWindow::buttonPIClicked()//pai值
{
    //判断是否是进行输入状态
    if(waittingForOperand)
        ui->display->setText(QString::number(3.141592654));
    else

   return;
}

void MainWindow::buttonDelClicked()//回退
{
    //判断当前是否属于数值输入模式
    if(waittingForOperand)
        return;
    QString text = ui->display->text();
    text.chop(1);

    //判断删除后数据是否为空
    if(text.isEmpty())
    {
        text = "0";
        waittingForOperand = true;
    }
    ui->display->setText(text);
}

void MainWindow::buttonClearClicked()//归零
{
    waittingForOperand = true;                      //等待操作数
    result = 0.0;
    value = 0.0;
    operatorFlag = false;
    modOperator = false;
    XYOperator = false;
    addOperator = false;
    minOperator = false;
    mulOperator = false;
    divOperator = false;
    ui->display->setText("0");
}

bool MainWindow::calculate(double operand)//运算结果
{
    if(addOperator)
    {
        result += operand;
        addOperator = false;
    }
    else if(minOperator)
    {

    result -= operand;
        minOperator = false;
    }
    else if(mulOperator)
    {
        result *= operand;
        mulOperator = false;
    }
    else if(divOperator)
    {
        if(operand - 0 < 10e-6 )
            return false;
        result /= operand;
        divOperator = false;
    }
    else if(modOperator)
    {
        if(operand - 0 < 10e-6 )
            return false;
         result = (int)result%(int)operand;
         modOperator = false;
    }
    else if(XYOperator)
    {
        result = pow(result,operand);
        XYOperator = false;
    }
    waittingForOperand = true;
    ui->display->setText(QString::number(result));
    return true;
}

void MainWindow::abortOperation()//出现错误
{
    buttonClearClicked();
    ui->display->setText(tr("ERROR!!!"));
}

本次设计的科学计算器,收获很大,通过运算符标志位选择进行哪种种运算。

源代码:https://download.csdn.net/download/qq_44145934/13851739

杜康o
关注 关注
  • 14
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
基于Qt界面设计的科学计算器
03-14
实现计算器的多功能计算,比如实现整数、小数点简单的加减乘除、也可以实现进制数的转换、也可以实现倒数、清零、复位等
Qt实现科学计算器——完整代码
08-23
使用Qt实现了科学计算器,功能类似于Windows自带的计算器,附带了比较全面的代码注释,科学计算器的具体设计原理可以访问我博客https://mp.csdn.net/postedit/81952851
Qt计算器——功能完整的计算器
weixin_46061874的博客
06-07 1285
一、功能介绍参考windows 10系统自带的计算器,进一步完善实验1的计算器功能,基本要求(必须要具备的): 支持四种计算模式:标准型、科学型、程序员、日期计算模式 ;支持货币与容量转换 ;支持不同模式的切换 。二、系统设计2.1概要设计2.2UI设计标准页面:货币转换界面:容量转换界面: 程序员计算器界面:容量转换界面:日期计算:科学计算器界面:实现代码:https://github.com/minsteps/calculator.........
利用Qt实现可视化科学计算器
最新发布
forever_bryant的博客
09-28 1165
qt实现一个功能完善的科学计算器
Qt科学计算器
11-06
Qt编写的科学计算器,有良好的界面,部分功能未实现!
Qt科学计算器
zhangxiaio1的博客
10-16 996
第一步:界面的设计,科学计算器的按钮有的存在上标下标,直接输入的是没有上下标效果的,因此必须采用其他方法,有两种思路,一是把所有文字做成图片,然后利用样式表实现,另一种就是在按钮上加上Qlabel并且借助htm语言实现。 第二步,数学处理,也就是按钮按一下数据要做出相应的改变,两种思路。 1)、利用自带的pressed、click、Release函数; 2) ...
Qt5 科学计算器的实现
12-13
本项目使用了Qt5.3.2版本进行开发,使用了设计模式中的简单工厂设计模式,支持四则运算,三角函数运算和幂运算,是属于计算器中的科学计算型计算器
基于Qt的软件框架设计
热门推荐
amwha的专栏
06-29 2万+
Qt软件框架-- 适用于一般的数据采集与控制系统
qt科学计算器源码
03-14
支持复杂表达式解析
Qt 4.70 多功能科学计算器
04-24
强大的多功能科学计算器 包含了所有计算符号 计算、运行正常
基于Qt实现的多人聊天
08-01
基于Qt实现的多人聊天。一个服务器对应多个客户端。服务器可以对新加进来的客户端进行监听,然后给每个客户端提示信息。此外还有互发消息功能。先在服务器创建连接进行监听。客户端填写用户名进入聊天室后建立连接便可互发消息。
QT-科学计算器-可视化
03-28
QT制作可视化科学计算器,利用逆波兰算法实现n种功能,包括二元一次方程计算,进制转换,括号等。
QT-科学计算器-可视化-逆波兰算法
03-28
利用QT制作科学计算器,实现可视化,包括括号、二元一次方程、指数对数运算等功能
基于QT科学计算器的设计与实现c++
12-27
该程序可以在qt4,qt5平台都可运行,实现了计算器的加减乘除,三角函数,乘方开方,二进制转换等功能。
计算器_C++_QT_计算器_
09-28
含四则运算、幂运算、对数运算等的计算器,可用QT进行可视化操作。
Qt 制作一个简易的计算器
zy1872071381的博客
09-10 7948
Qt 简易计算器
C++ QT 课程设计:科学计算器
yul13579的博客
12-01 3030
本文是C++课程的实验报告。界面设计使用QT Creator,纯拖拽无代码,对菜鸟很友好,仅使用样式表做了少量美化。​ 完整工程下载地址:https://download.csdn.net/download/yul13579/53395197
QT5 实现简易科学计算器
qq_43518938的博客
12-30 3350
QT5 实现简易科学计算器界面展示功能叙述源码主界面源码mainwindow.hmainwindow.cpp基础计算界面floatcanculator.hfloatcanculator.cppBeh.hppExpression.hppStack.hppFunction.hFunction.cpplegalexpression.hlegalexpression.cpp矩阵计算界面matrixfunc...
基于qt计算器支持混合四则运算
05-13
基于Qt计算器是一种可以处理各种数学运算的计算器,支持混合四则运算。具体来说,它可以进行加、减、乘、除四种基本运算,同时还支持混合运算,比如可以进行多个运算符的组合计算,例如加减乘除混合运算,以及括号的运用。 在实际使用中,用户可以通过输入数字和操作符,以及使用括号和清除等功能来实现计算。基于Qt计算器还支持多种精度的实现,包括浮点数、有理数和复数等,可以满足不同应用场景的需求。此外,它还可以进行科学计数法的转换,方便对大数计算和小数部分的精确处理。综上所述,基于Qt计算器具有灵活、高效、精确等特点,是一种实用性非常强的数学计算工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 基于QT的科学计算器 4127
  • 非线性数据结构——图 1886
  • c++排序与检索 例题大理石(学习) 852
  • 数据结构——图最短路径问题 746
  • 天梯赛真题L1-002 打印沙漏 672

分类专栏

  • PTA 7篇
  • 天梯赛 7篇
  • 贪心 1篇
  • PAT
  • 学习 7篇
  • 数据结构 3篇
  • 1篇
  • 2篇

最新评论

  • 基于QT的科学计算器

    z55716368: 楼主源码可以给一个百度网盘什么的地址吗。。。没有C币了。。

  • 基于QT的科学计算器

    哎呀你好哈: 请问这是全部代码了吗

  • 基于QT的科学计算器

    叶叶叶叶叶叶叶叶叶叶叶叶叶叶叶叶: 代码链接错误了

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 天梯赛真题L1-043阅览室
  • 天梯赛真题L2-001紧急救援
  • 天梯赛真题L2-021点赞狂魔
2021年5篇
2020年3篇
2019年7篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜康o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

两个鬼故事为他人开一朵绚丽的花姐姐的朋友口袋妖怪究极日月cia注册网络公司起什么名字繁字起名什么好王姓男童起名100分店铺起名练习seo原创助手元宵节的古诗留别王维起名免费神器重生之逆转仙途魔兽地图包炒饭爱国头像罪与罚电影英文人名起名大全注册公司起名问题程姓女孩起名字啊加盟万州烤鱼节哀短信异界全职业大师www.08xxx.com用繁体字起名字今日股市最新消息2022年虎宝宝起名哦冬夜的灯光你是主人我是仆游戏骑马与砍杀破解补丁教辅书店起名少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化