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

news2024/9/23 7:30:37

这是我们要包含的头文件

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

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

相关文章

nginx服务前端访问查看无响应的问题

问题 nginx 启动之后&#xff0c;前端访问无数据&#xff0c;F12 查看&#xff0c;提示挂起。 以为是配置问题&#xff0c;查看配置文件&#xff0c;未发现配置的有问题。 原因 通过查看配置文件&#xff0c;发现转发的服务地址为127.0.0.1&#xff0c;手动ping 127.0.0.1&a…

AI人工智能与云原生:创新科技的完美结合

人工智能&#xff08;AI&#xff09;是当今科技领域的热门话题&#xff0c;而云原生则是一种新兴的软件开发和部署模式。AI人工智能与云原生的结合&#xff0c;为现代技术创新提供了无限的可能性。本文将探讨AI与云原生的关系&#xff0c;并介绍其如何在实际应用中实现协同效应…

谷歌宣布向云计算客户开放 Gemini Pro,开发者可用其构建应用

12 月 14 日消息&#xff0c;美国时间周三&#xff0c;谷歌宣布了一系列升级的人工智能&#xff08;AI&#xff09;功能&#xff0c;旨在为其云计算客户提供更好的服务。这家科技巨头正试图赶上竞争对手&#xff0c;比如微软和 OpenAI&#xff0c;它们都在积极利用人工智能的热…

docker安装最新版SQL Server并还原备份的数据库

docker安装数据库 拉取微软官方最新版镜像 docker pull mcr.microsoft.com/mssql/server 拉去镜像并创建容器 docker run -e "ACCEPT_EULAY" -e "SA_PASSWORDsa_password_123456" -p 1433:1433 -v /opt/:/opt --name sqlserver -d mcr.microsoft.com/ms…

〖大前端 - 基础入门三大核心之JS篇(54)〗- 原型和原型链

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;哈哥撩编程&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xff0c;目前在公司…

LOF基金跟股票一样吗?

LOF基金&#xff0c;全称为"上市型开放式基金"&#xff0c;是一种可以在上海证券交易所认购、申购、赎回及交易的开放式证券投资基金。投资者可以通过上海证券交易所场内证券经营机构或场外基金销售机构进行认购、申购和赎回基金份额。 LOF基金的特点是既可以像股票…

三层交换机原理与配置

文章目录 三层交换机原理与配置一、三层交换技术概述二、传统的 MLS三、基于CEF 的MLS1、转发信息库&#xff08;FIB&#xff09;2、邻接关系表3、工作原理&#xff1a; 四、三层交换机的配置1、三层交换机配置命令2、三层交换机配置步骤 三层交换机原理与配置 一、三层交换技…

微服务 Nacos服务注册与发现

一、Nacos 功能介绍 在微服务架构下&#xff0c;一个业务服务会被拆分成多个微服务&#xff0c;各个服务之间相互通信完成整体的功能。另外&#xff0c;为了避免单点故障&#xff0c;微服务都会采取集群方式的高可用部署&#xff0c;集群规模越大&#xff0c;性能也会越高&…

linux磁盘空间清理

查看磁盘使用情况 查看磁盘分区上可以使用的磁盘空间 $ df -h若要查看文件类型和block&#xff0c;使用下面的命令 $ df -T查看每个文件和目录的磁盘使用空间&#xff0c;也就是文件的大小。 $ sudo du -sh /* $ sudo du -h --max-depth1 /清理旧的 Snap 包版本以释放磁盘空…

智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.乌燕鸥算法4.实验参数设定5.算法结果6.参考文…

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…

机器视觉【1】相机的成像(畸变)模型

零、前言 很久没写文章&#xff0c;简单唠一唠。 不知道巧合还是蜀道同归&#xff0c;部门领导设定了些研究课题&#xff0c;用于公司部门员工的超前发展&#xff0c;该课题是“2D to 3D的三维重建”&#xff0c;这一块刚好是我个人看中的一个大方向&#xff0c;所以就有了这…

使用Docker本地安装部署Draw.io绘图工具并实现远程访问协作办公

前言 提到流程图&#xff0c;大家第一时间可能会想到Visio&#xff0c;不可否认&#xff0c;VIsio确实是功能强大&#xff0c;但是软件为收费&#xff0c;并且因为其功能强大&#xff0c;导致安装需要很多的系统内存&#xff0c;并且是不可跨平台使用。所以&#xff0c;今天给…

docker小白第三天

docker小白第三天 docker为什么会比虚拟机快 1、docker有着比虚拟机更少的抽象层。不需要Hypervisor实现硬件资源虚拟化&#xff0c;运行在docker容器上的程序直接使用的都是实际物理机的硬件资源&#xff0c;因此在CPU、内存利用率上docker将会在效率上有明显优势。 2、dock…

CSS盒模型 盒子尺寸问题

什么是盒模型 CSS盒模型分为用来放置内容的content区域&#xff0c;用来调整内容和边框距离的padding区域。用来限制盒子边界的border区域以及用于调整盒子之间距离的margin区域。现在去掉margin&#xff0c;只考虑盒子内部的尺寸问题。 我们先来制作一个盒子。 <!DOCTYPE…

PTA✨C语言 求e的近似值

7-1 求e的近似值 分数 15 全屏浏览题目 切换布局 作者 C课程组 单位 浙江大学 自然常数 e 可以用级数 11/1!1/2!⋯1/n!⋯ 来近似计算。本题要求对给定的非负整数 n&#xff0c;求该级数的前 n1 项和。 输入格式: 输入第一行中给出非负整数 n&#xff08;≤1000&#xff0…

读书笔记-《数据结构与算法》-摘要6[快速排序]

快速排序 核心&#xff1a;快排是一种采用分治思想的排序算法&#xff0c;大致分为三个步骤。 定基准——首先随机选择一个元素最为基准划分区——所有比基准小的元素置于基准左侧&#xff0c;比基准大的元素置于右侧递归调用——递归地调用此切分过程 快排的实现与『归并排…

【图论】普利姆算法,最小生成树

一次加入一个节点到我们的最下生成树中。加入哪个&#xff1f;跟着下面的步骤走一遍你就会了。 1. 把第一个节点A添加进来 2. 看两条边<A,B>,<A,E>,一个长度是3&#xff0c;一个长度是4&#xff0c;把长度短的边的另一个节点添加进来&#xff0c;也就是B 3. 再看A,…

StatusBar、NavigationBar窗口显示在Activity下面之aosp14窗口类bug线索征集

背景&#xff1a; hi&#xff0c;粉丝朋友们&#xff1a; 从上次帮助国际学员解决了一个分屏有黑屏的bug后&#xff0c;相关blog和解决方法 https://blog.csdn.net/learnframework/article/details/134708393 解决方法看b站视频&#xff1a; https://www.bilibili.com/video/B…

C# 物联网设备通讯协议客户端

IoTClient是一个物联网设备通讯协议实现客户端,将包括主流PLC通信读取、ModBus协议、Bacnet协议等常用工业通讯协议。本组件基于.NET Standard 2.0,可用于.Net的跨平台开发,如Windows、Linux甚至可运行于树莓派上。 技术架构 1. 编码语言 C# 2. 开发工具 Visual Studio 2019…