使用qt实现四则运算计算机项目

这是我们要包含的头文件

#include <QWidget>
#include<QStack>
#include<string.h>
#include<string>

这是我在ui界面创建的计算机基础框架。

接下来要实现按住每个按钮在白框内显示;

因此我们要定义一个QString 类型的变量 

QString expression;

接下来是我对每个按钮的实现

void Widget::on_one_clicked()
{expression+="1";ui->lineEdit->setText(expression);
}void Widget::on_two_clicked()
{expression+="2";ui->lineEdit->setText(expression);
}void Widget::on_three_clicked()
{expression+="3";ui->lineEdit->setText(expression);
}void Widget::on_four_clicked()
{expression+="4";ui->lineEdit->setText(expression);
}void Widget::on_five_clicked()
{expression+="5";ui->lineEdit->setText(expression);
}void Widget::on_six_clicked()
{expression+="6";ui->lineEdit->setText(expression);
}void Widget::on_seven_clicked()
{expression+="7";ui->lineEdit->setText(expression);
}void Widget::on_eight_clicked()
{expression+="8";ui->lineEdit->setText(expression);
}void Widget::on_nine_clicked()
{expression+="9";ui->lineEdit->setText(expression);
}void Widget::on_zero_clicked()
{expression+="0";ui->lineEdit->setText(expression);
}void Widget::on_left_clicked()
{expression+="(";ui->lineEdit->setText(expression);
}void Widget::on_right_clicked()
{expression+=")";ui->lineEdit->setText(expression);
}void Widget::on_cheng_clicked()
{expression+="*";ui->lineEdit->setText(expression);
}void Widget::on_chu_clicked()
{expression+="/";ui->lineEdit->setText(expression);
}void Widget::on_plus_clicked()
{expression+="+";ui->lineEdit->setText(expression);
}void Widget::on_sub_clicked()
{expression+="-";ui->lineEdit->setText(expression);
}

 C键的实现

void Widget::on_clear_clicked()
{expression.clear();ui->lineEdit->clear();
}

先对expression清空,再清空白框。

删除键的实现

void Widget::on_deletebutton_clicked()
{expression.chop(1);ui->lineEdit->setText(expression);
}

使用chop可以吃掉最后一个。

以下是最难的一个件,=键

这里的代码使用了我之前用栈实现四则运算的代码。

char str[128]={0};

 先定义一个char *类型

qstrcpy(str, expression.toUtf8().data());

使用这个可以把QString类型转换为char*类型

以下就是实现步骤

思路就是创建一个操作符栈,数字栈。

如果该操作符的优先级高于栈顶的操作符,则该操作符入栈。

否则栈顶的操作符出栈,并把数字栈的前两个数字出栈运算。

再把结果放入数字栈。

float n1, n2, tmp = 0;int  priority;char op;QStack<float> numS;QStack<char> opS;int mylength=strlen(str);for (int i = 0; i <mylength ; i++){if (str[i] >= '0' && str[i] <= '9'){tmp = tmp * 10 + float(str[i] - '0');}else{numS.push(tmp);priority = getpriority(str[i]);while (!opS.empty() && priority <= getpriority(opS.top())){op = opS.top();opS.pop();n2 = numS.top();numS.pop();n1 = numS.top();numS.pop();n1 = cal_one(n1, op, n2);numS.push(n1);}opS.push(str[i]);tmp = 0;}}// 处理最后一个数字numS.push(tmp);// 计算剩余的表达式while (!opS.empty()){op = opS.top();opS.pop();n2 = numS.top();numS.pop();n1 = numS.top();numS.pop();float result = cal_one(n1, op, n2);numS.push(result);}ui->lineEdit->setText(QString::number(numS.top()));
}int Widget::getpriority(char ch)
{int priority = -1;//-1代表没有找到对应的运算符if (ch == '+' || ch == '-'){priority = 1;}else if(ch=='*'||ch=='/'){priority = 2;}return priority;
}
int Widget::cal_one(float n1, char op, float n2)
{float result = 0;switch (op) {case '+':result = n1 + n2;break;case '-':result = n1 - n2;break;case '*':result = n1 * n2;break;case '/':result = n1 / n2;break;}return result;
}
ui->lineEdit->setText(QString::number(numS.top()));
}

这一步可以把int类型转为QString 类型。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//按钮放图片QIcon con("C:\\Users\\15322\\Pictures\\Screenshots\\tt.PNG");ui->deletebutton->setIcon(con);//ui->equal->setStyleSheet("backgroup:blue");
}

 这一步可以再按钮上放图片。

一下就是结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222781.shtml

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

相关文章

Linux系统上64位ATT汇编语言多个源文件计算两个数的平方

运行程序的环境 sudo lsb_release -a看到操作系统是Ubuntu 22.04 LTS。 sudo uname -r看到内核版本是5.15.0-86-generic。 sudo as --version看到as的版本是2.38。 sudo ld --version看到ld的版本是2.38。 sudo gcc --version看到gcc版本是11.2.0。 sudo gdb --version看到gdb…

Yum仓库架构解析与搭建实践

1.Yum仓库搭建 1.1本地Yum仓库图解 1.2Linux本地仓库搭建 配置本地光盘镜像仓库 1&#xff09;挂载 [roothadoop101 ~]# mount -t iso996 /dev/cdrom/mnt 2&#xff09;查看 [rooothadoop101 ~] # df -h | |grep -i mnt /dev/sr0 4.6G 4.4G 3&#xf…

服务器上配置jupyter,提示Invalid credentials如何解决

我是按照网上教程在服务器上安装的jupyter以及进行的密码配置&#xff0c;我利用 passwd()这个口令生成的转译密码是"argon...."。按照教程配置jupyter notebook配置文件里面的内容&#xff0c;登陆网页提示"Invalid credentials"。我谷歌得到的解答是&…

学生选课系统基础版

目录 一.Java 中的集合框架&#xff08;上&#xff09; 1.Java中的集合框架概述 2.Collection接口&接口简介 3.学生选课——创建学生类和课程类 4.学生选课——添加课程Ⅰ 5.学生选课——添加课程Ⅱ 6.学生选课——课程查询 7.学生选课——课程修改 8.学生选课——课程删…

EduSoho教培系统 任意文件读取漏洞复现(CNVD-2023-03903)

0x01 产品简介 EduSoho教培系统是由杭州阔知网络科技有限公司研发的开源网校系统 0x02 漏洞概述 该教培系统classroom-course-statistics接口存在未授权任意文件读取漏洞,通过该漏洞攻击者可以读取到config/parameters.yml文件的内容,拿到该文件中保存的secret值以及数据库…

ShenYu网关Http服务探活解析

文章目录 网关端服务探活admin端服务探活 Shenyu HTTP服务探活是一种用于检测HTTP服务是否正常运行的机制。它通过建立Socket连接来判断服务是否可用。当服务不可用时&#xff0c;将服务从可用列表中移除。 网关端服务探活 以divide插件为例&#xff0c;看下divide插件是如何获…

Java监听器与观察者模式

Java监听器与观察者模式 Java中的监听器&#xff08;Listener&#xff09;和观察者模式&#xff08;Observer Pattern&#xff09;都是用于处理对象间的事件通知和响应的设计模式。它们的目的是在对象之间建立一种松散的耦合&#xff0c;使得一个对象的状态变化可以通知到其他…

vue中element-ui日期选择组件el-date-picker 清空所选时间,会将model绑定的值设置为null 问题 及 限制起止日期范围

一、问题 在Vue中使用Element UI的日期选择组件 <el-date-picker>&#xff0c;当你清空所选时间时&#xff0c;组件会将绑定的 v-model 值设置为 null。这是日期选择器的预设行为&#xff0c;它将清空所选日期后将其视为 null。但有时后端不允许日期传空。 因此&#xff…

Kubernetes 容器编排(1)

前言 知识扩展 早在 2015 年 5 月&#xff0c;Kubernetes 在 Google 上的搜索热度就已经超过了 Mesos 和 Docker Swarm&#xff0c;从那儿之后更是一路飙升&#xff0c;将对手甩开了十几条街,容器编排引擎领域的三足鼎立时代结束。 目前&#xff0c;AWS、Azure、Google、阿里云…

使用 PyTorch FSDP 微调 Llama 2 70B

引言 通过本文&#xff0c;你将了解如何使用 PyTorch FSDP 及相关最佳实践微调 Llama 2 70B。在此过程中&#xff0c;我们主要会用到 Hugging Face Transformers、Accelerate 和 TRL 库。我们还将展示如何在 SLURM 中使用 Accelerate。 完全分片数据并行 (Fully Sharded Data P…

深入学习 C++编程,数据结构与算法关系

数据结构是计算机科学中非常重要的概念之一。它是一种组织和存储数据的方式&#xff0c;能够有效地操作和管理数据&#xff0c;以便提高算法的效率。 以下是一些为什么要有数据结构的原因&#xff1a; (1) 数据组织&#xff1a;数据结构可以帮助我们组织和管理大量的数据。通过…

【elementui笔记:el-table表格的输入校验】

之前做得比较多的校验是在el-form表单里做的&#xff0c;但有时也遇到&#xff0c;需要在table内输入数据&#xff0c;然后校验输入的数据是否符合要求的情况。因此记录一下。 思路&#xff1a; 1.需要借助el-form的校验&#xff0c;el-table外层嵌套一层el-form&#xff0c;使…

世界5G大会

会议名称:世界 5G 大会 时间:2023 年 12 月 5 日-12 月 8 日 地点:河南郑州 一、会议简介 世界 5G 大会,是由国务院批准,国家发展改革委、科技部、工 信部与地方政府共同主办,未来移动通信论坛联合属地主管厅局联合 承办,邀请全球友好伙伴共同打造的全球首个 5G 领域…

CleanMyMac X2024值不值得下载?

macOS已经成为最受欢迎的桌面操作系统之一&#xff0c;它提供了直观、简洁的用户界面&#xff0c;使用户可以轻松使用和管理系统。macOS拥有丰富的应用程序生态系统&#xff1b;还可以与其他苹果产品和服务紧密协作&#xff0c;如iPhone、iPad&#xff0c;用户可以通过iCloud同…

# 和 $ 的区别②

上节博客说了使用 # 的时候,如果参数为 String ,会自动加上单引号 但是当参数为String 类型的时候,也有不需要加单引号的情况,这时候用 # 那就会出问题 比如根据 升序(asc) 或者 降序(desc) 查找的时候,加了单引号那就会报错 这个时候我们就只能使用 $ 如果看不懂代码,就去…

jmeter,同一线程组内,调用cookie实现接口关联

取cookie方式参考上一篇&#xff1a;jemeter&#xff0c;取“临时重定向的登录接口”响应头中的cookie-CSDN博客 元件结构 登录后要执行的接口为“api/get_event_list/”&#xff0c;在该HTTP请求下创建HTTP信息头管理器&#xff0c;配置如下&#xff1a; 执行测试后&#xff0…

Docker网络模式:深度理解与容器网络配置

Docker 的网络模式是容器化应用中一个关键而复杂的方面。本文将深入讨论 Docker 的网络模式&#xff0c;包括基本概念、常用网络模式以及高级网络配置&#xff0c;并通过更为丰富和实际的示例代码&#xff0c;帮助读者全面掌握如何理解和配置容器网络。 Docker网络基础 1 Doc…

Android--Jetpack--Navigation详解

须知少日拏云志&#xff0c;曾许人间第一流 一&#xff0c;定义 Navigation 翻译成中文就是导航的意思。它是谷歌推出的Jetpack的一员&#xff0c;其目的主要就是来管理页面的切换和导航。 Activity 嵌套多个 Fragment 的 UI 架构模式已经非常普遍&#xff0c;但是对 Fragmen…

Sql标准梳理

SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系型数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。SQL标准由国际标准化组织&#xff08;ISO&#xff09;和美国国家标准化组织&#xff08;ANSI&#xff09;制定和维护&#xff0c;旨在提供…

SpringIOC之FilterType

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…