Qt+C++桌面计算器源码

简介: Qt+C++桌面计算器源码
程序示例精选
Qt+C++桌面计算器源码
如需安装运行环境或远程调试,可点击
博主头像进入个人主页查看博主联系方式,由专业技术人员远程协助!

前言

这篇博客针对《Qt+C++桌面计算器源码》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。

运行结果

文章目录

一、所需工具软件
二、使用步骤
1. 主要代码
2. 运行结果

三、在线协助

一、所需工具软件

1. VS2019, C++
2. Qt

二、使用步骤

代码如下(示例):

<code class="language-plaintext hljs">void MainWindow::Calc_Suffix()
{
   
   
  for(int i=0;i<out.size();i++)
  {
   
   
      bool is_Num =true;
      out[i].toDouble(&is_Num);
      if(is_Num)//如果是数字,直接入栈
      {
   
   
          s2.push(out[i].toDouble(&is_Num));
      }
      else if(out[i]=='s'||out[i]=='c'||out[i]=='t'||out[i]=='^')
      {
   
   
          double x=s2.pop();
          if(out[i]=='s')
              x=sin(x);
          else if(out[i]=='c')
              x=cos(x);
          else if(out[i]=='t')
              x=tan(x);
          else if(out[i]=='l')
              x=log(x);
          else if(out[i]=='^')
          {
   
   
              int y=x;
              x=s2.pop();
              int z=x;
              for(int j=1;j<y;j++)
                  x=x*z;
          }
          s2.push(x);
      }
      else if(out[i]=="+"||out[i]=="-"||out[i]=="*"||out[i]=="/")//如果是运算符,弹栈两次,并进行运算,运算后,结果入栈
      {
   
   
          double x=s2.pop();
          double y=s2.pop();
          if(out[i]=="+")
          {
   
   
              s2.push(y+x);
          }else if(out[i]=="-"){
   
   
              s2.push(y-x);
          }else if(out[i]=="*"){
   
   
              s2.push(y*x);
          }else if(out[i]=="/"){
   
   
              s2.push(y/x);
          }
      }
  }
  result = s2.pop();
  qDebug()<<result;
}

void MainWindow::m_init()
{
   
   
    ba.clear();
    out.clear();
}

void MainWindow::on_pushButton_clicked()
{
   
   
    in=ui->lineEdit->text();//获取表达式
    getChar();
    getSuffix();
    Calc_Suffix();
    ui->lineEdit->clear();//清空文本编辑框
    ui->lineEdit->setText(QString("%1%2").arg('=').arg(result));//显示结果
    m_init();
}

void MainWindow::on_pushButton_2_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(0));
}

void MainWindow::on_pushButton_3_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(1));
}

void MainWindow::on_pushButton_4_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(2));
}

void MainWindow::on_pushButton_5_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(3));
}

void MainWindow::on_pushButton_6_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(4));
}

void MainWindow::on_pushButton_7_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(5));
}

void MainWindow::on_pushButton_8_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(6));
}

void MainWindow::on_pushButton_9_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(7));
}

void MainWindow::on_pushButton_10_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(8));
}

void MainWindow::on_pushButton_11_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(9));
}

void MainWindow::on_pushButton_12_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("+"));
}

void MainWindow::on_pushButton_13_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("-"));
}

void MainWindow::on_pushButton_14_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("*"));
}

void MainWindow::on_pushButton_15_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("/"));
}

void MainWindow::on_pushButton_20_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("."));
}

void MainWindow::on_pushButton_18_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("("));
}

void MainWindow::on_pushButton_19_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg(")"));
}

void MainWindow::on_pushButton_16_clicked()
{
   
   
    //清空所有内容,并初始化
    ui->lineEdit->clear();
    m_init();
}

void MainWindow::on_pushButton_17_clicked()
{
   
   
    //退格删除一个字符
    ui->lineEdit->backspace();
}

void MainWindow::on_pushButton_21_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("sin"));
}

void MainWindow::on_pushButton_22_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("cos"));
}

void MainWindow::on_pushButton_23_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("tan"));
}

void MainWindow::on_pushButton_24_clicked()//最小公倍数,c_mul
{
   
   
    QString str=ui->lineEdit->text();
    QString l1="0",l2="0";
    QByteArray yue = str.toLatin1();
    bool hasSpace = false;
    QString c_div="1";
    int max_yue;
    for(int i=0;i<yue.size();i++)
    {
   
   
         char x=yue[i];
         if(x=='.')
            hasSpace=true;
         else if(x!='.'&&hasSpace)
            l2+=QString(x);
         else
            l1+=QString(x);
    }
    int s1=l1.toInt(nullptr,10);
    int s2=l2.toInt(nullptr,10);
    int max;
    if(s1>s2)
        max=s1;
    else
        max=s2;
    for(int j=2;j<max;j++)
    {
   
   
        if(s1 % j==0&&s2%j==0)
      {
   
   
            max_yue=j;
      }
    }
    int z=s1*s2/max_yue;
    QString c_mul=QString::number(z);
    ui->lineEdit->setText(c_mul);
}

void MainWindow::on_pushButton_25_clicked()//公约数,两个数以小数点分格
{
   
   
    QString str=ui->lineEdit->text();
    QString l1="0",l2="0";
    QByteArray yue = str.toLatin1();
    bool hasSpace = false;
    QString c_div="1";
    for(int i=0;i<yue.size();i++)
    {
   
   
         char x=yue[i];
         if(x=='.')
            hasSpace=true;
         else if(x!='.'&&hasSpace)
            l2+=QString(x);
         else
            l1+=QString(x);
    }
    int s1=l1.toInt(nullptr,10);
    int s2=l2.toInt(nullptr,10);
    int max;
    if(s1>s2)
        max=s1;
    else
        max=s2;
    for(int j=2;j<max;j++)
    {
   
   
        if(s1 % j==0&&s2%j==0)
      {
   
   
            c_div+="*";
            c_div+=QString::number(j);
      }
    }
    ui->lineEdit->setText(c_div);
}

void MainWindow::on_pushButton_26_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("^"));
}

void MainWindow::on_pushButton_27_clicked()
{
   
   
    QString str=ui->lineEdit->text();
    ui->lineEdit->setText(QString("%1%2").arg(str).arg("log"));
}


</code>
AI 代码解读

运行结果

三、在线协助:

如需安装运行环境或远程调试,可点击博主头像,进入个人主页查看博主联系方式,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作

博主个人主页:https://developer.aliyun.com/profile/expert/rfnzgp3sk3ahc
博主所有文章点这里:https://developer.aliyun.com/profile/expert/rfnzgp3sk3ahc
博主联系方式点这里:https://developer.aliyun.com/profile/expert/rfnzgp3sk3ahc
相关文章
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
116 2
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
348 1
Qt(C++)开发一款图片防盗用水印制作小工具
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
320 4
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
142 1
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
358 5
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
168 2
QT Widgets模块源码解析与实践
【9月更文挑战第20天】Qt Widgets 模块是 Qt 开发中至关重要的部分,提供了丰富的 GUI 组件,如按钮、文本框等,并支持布局管理、事件处理和窗口管理。这些组件基于信号与槽机制,实现灵活交互。通过对源码的解析及实践应用,可深入了解其类结构、布局管理和事件处理机制,掌握创建复杂 UI 界面的方法,提升开发效率和用户体验。
388 13
|
10月前
|
QT源码拾贝6-11(qwindowswindow)
这篇文章深入探讨了Qt源码中与窗口激活相关的函数,QDebug运算符重载,vscode的变量提示,Windows常用类型名,获取所有窗体的方法,以及QSharedPointer智能指针的使用。
239 0
QT源码拾贝6-11(qwindowswindow)
QT源码拾贝0-5(qimage和qpainter)
这篇文章介绍了在Qt源码中qimage和qpainter的使用,包括线程池的使用、智能指针的存储、std::exchange函数的应用、获取类对象的方法以及QChar字节操作。
154 0
QT源码拾贝0-5(qimage和qpainter)
【C++】C++-学生考试题库管理系统(源码)
本系统设计了一个选题管理流程,包括读取题目信息、随机抽取题目、保存及查询选题结果等功能。使用 `readProjects` 从文件读取题目信息,`drawProject` 随机抽取未选中的题目,`saveSelection` 保存选题结果至文件,`querySelection` 查询并显示所有选题结果。主函数提供菜单界面,支持学生信息输入、抽题及结果查询。关注【测试开发自动化】公众号,回复“题库”获取源码。
113 1

推荐镜像

更多
  • qt
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等