使用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"。我谷歌得到的解答是&…

go mod 模式下安装beego

要在您的项目中使用Go modules来安装beego&#xff0c;您可以按照以下步骤进行操作&#xff1a; 确保您的Go版本在1.11或更高版本。您可以在终端中运行go version命令来检查您的Go版本。 创建一个新的文件夹作为您的项目根目录&#xff0c;并导航到该目录。 运行以下命令来初…

学生选课系统基础版

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

判断某个ip是否在某个网段下

可以使用Python3中的ipaddress库来判断一个IP是否在某一个网段下。以下是一个简单的示例代码&#xff1a; import ipaddressdef check_ip_in_network(ip, network):ip_obj ipaddress.ip_address(ip)network_obj ipaddress.ip_network(network, strictFalse) # strictFalse允…

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

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

linux 环境下替换jar包中class文件

1、查询出文件路径 jar tvf app.jar | grep Test.class2、解压缩指定文件 jar -xvf app.jar BOOT-INF/classes/com/test/Test.class3、替换文件 cp Test.class BOOT-INF/classes/com/test/Test.class4、打进jar包 jar -uvf app.jar BOOT-INF/classes/com/test/Test.class解…

Moonbeam与Subsocial集成,为网络带来社交应用创建

波卡上的首选多链开发平台Moonbeam宣布与Subsocial集成。通过Polkadot独特的跨共识消息传递&#xff08;XCM&#xff09;机制实现的这一新整合&#xff0c;将使SUB代币能够在Moonbeam上的去中心化应用中使用。Moonbeam与Subsocial之间的双向HRMP通道加强了Moonbeam作为Polkadot…

ShenYu网关Http服务探活解析

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

华为OD机试 - 中文分词模拟器(Java JS Python C)

题目描述 给定一个连续不包含空格的字符串,该字符串仅包含英文小写字母及英文标点符号(逗号、分号、句号),同时给定词库,对该字符串进行精确分词。 说明: 精确分词:字符串分词后,不会出现重叠。即"ilovechina",不同词库可分割为"i,love,china",…

无心剑中译佚名《爱情的26个字母寓意》

文章目录 A -- Accept -- 接受B -- Belief -- 信任C -- Care -- 关心D -- Digest -- 化解E -- Everlasting -- 永恒F -- Freedom -- 自由G -- Give -- 给予H -- Heart -- 心I -- Independence -- 独立J -- Jealousy -- 嫉妒K -- Kiss -- 吻L -- Love -- 爱M -- Mature -- 成熟

C++函数重载

目录 函数重载的用法 函数重载的剖析 函数重载的用法 函数重载是函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的同名函数&#xff0c;这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同&#xff0c;所以常用来处理实现功能类似数据类型不同…

Java监听器与观察者模式

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

使用工具 NVM来管理不同版本的 Node.js启动vue项目

使用工具如 NVM&#xff08;Node Version Manager&#xff09;来管理不同版本的 Node.js。NVM 允许你在同一台计算机上安装和切换不同版本的 Node.js。以下是一些步骤&#xff0c;以便同时在你的系统中安装两个 Node.js 版本&#xff1a; 安装 NVM: 首先&#xff0c;你需要安装…

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

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

linux设置环境变量

linux设置环境变量 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; Linux设置环境变量&#xff1a;打造个性化开发环境 在Linux系统中&#xff0c;环境变量是一项…

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;数据结构可以帮助我们组织和管理大量的数据。通过…