Qt简易计算器的代码实现

 大二用qt写的简易计算机,已经修改完bug,请放心食用

输入的时候一定用按钮,不要直接在文本框中输入

在qt中新建这几个文件,运行就OK了

 main.cpp

 

#include "calculator.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);calculator w;w.show();return a.exec();
}

 

 

 

calculator.h的代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include<QPushButton>
#include<QLineEdit>
#include<QHBoxLayout>
#include<QVBoxLayout>
#include<QGridLayout>
#include<QString>
#include<QStack>
#include<QTime>
#include<iterator>
class calculator : public QMainWindow
{Q_OBJECTpublic:calculator(QWidget *parent = 0);~calculator();private:QLineEdit *inputLine;//显示框QString input="0"; //输入框bool flat=false;//0-9按钮QPushButton *zeroButton;QPushButton *oneButton;QPushButton *twoButton;QPushButton *threeButton;QPushButton *fourButton;QPushButton *fiveButton;QPushButton *sixButton;QPushButton *sevenButton;QPushButton *eightButton;QPushButton *nineButton;QPushButton *addButton;QPushButton *subButton;QPushButton *divButton;QPushButton *mulButton;QPushButton *equButton;QPushButton *timButton; //TimeQPushButton *decButton;QPushButton *botButton;QPushButton *CEButton;QPushButton *ACButton;QPushButton *lefButton;QPushButton *rigButton;private slots:void buttonZeroClicked();void buttonOneClicked();void buttonTwoClicked();void buttonThreeClicked();void buttonFourClicked();void buttonFiveClicked();void buttonSixClicked();void buttonSevenClicked();void buttonEightClicked();void buttonNineClicked();void buttonAddClicked();//+void buttonSubClicked();//-void buttonMulClicked();//乘void buttonDivClicked();//除void buttonTimClicked(); //时间void buttonDecClicked();//小数点void buttonBotClicked(); //加减号void buttonEquClicked();//等于号void buttonLefClicked();//左括号void buttonRigClicked();//右括号void buttonCEClicked();//CEvoid buttonACClicked();//AC
};#endif // MAINWINDOW_H

 

 

 

 

 

 

calculator.cpp的代码

#include "calculator.h"
#include<iostream>
using namespace std;
#include<stack>
#include<vector>
#include<cstdlib>
#include<limits.h>
#pragma execution_character_set("utf-8")
bool isNum(char ch);
bool isOperate(char ch);
int level(char ch);
double scd(string s);
double getValue(vector<string> V);
vector<string> midToPost(string s);calculator::calculator(QWidget *parent) : QMainWindow(parent)
{QWidget *widget=new QWidget; //构建一个QWidget布局将设置的布局添加进这个QWidgetthis->setCentralWidget(widget);inputLine=new QLineEdit;inputLine->setText(input);zeroButton=new QPushButton("0");oneButton=new QPushButton("1");twoButton=new QPushButton("2");threeButton=new QPushButton("3");fourButton=new QPushButton("4");fiveButton=new QPushButton("5");sixButton=new QPushButton("6");sevenButton=new QPushButton("7");eightButton=new QPushButton("8");nineButton=new QPushButton("9");decButton=new QPushButton(".");botButton=new QPushButton("±");timButton=new QPushButton("Time");addButton=new QPushButton("+");subButton=new QPushButton("-");mulButton=new QPushButton("*");divButton=new QPushButton("/");equButton=new QPushButton("=");lefButton=new QPushButton("(");rigButton=new QPushButton(")");CEButton=new QPushButton("CE");ACButton=new QPushButton("AC");QGridLayout *H=new QGridLayout(this); //声明了一个网格布局inputLine->setFixedHeight(50); //调整第一行大小CEButton->setFixedHeight(50);ACButton->setFixedHeight(50);H->addWidget(inputLine,0,0,1,3);H->setRowStretch(0,100);H->addWidget(CEButton,0,3);H->addWidget(ACButton,0,4);H->addWidget(oneButton,1,0);H->addWidget(twoButton,1,1);H->addWidget(threeButton,1,2);H->addWidget(botButton,1,3);H->addWidget(timButton,1,4);H->addWidget(fourButton,2,0);H->addWidget(fiveButton,2,1);H->addWidget(sixButton,2,2);H->addWidget(addButton,2,3);H->addWidget(subButton,2,4);H->addWidget(sevenButton,3,0);H->addWidget(eightButton,3,1);H->addWidget(nineButton,3,2);H->addWidget(mulButton,3,3);H->addWidget(divButton,3,4);H->addWidget(zeroButton,4,0);H->addWidget(decButton,4,1);H->addWidget(lefButton,4,2);H->addWidget(rigButton,4,3);H->addWidget(equButton,4,4);widget->setLayout(H); //将布局显示出来connect(zeroButton,SIGNAL(clicked()),this,SLOT(buttonZeroClicked()));//信号与槽函数connect(oneButton,SIGNAL(clicked()),this,SLOT(buttonOneClicked()));connect(twoButton,SIGNAL(clicked()),this,SLOT(buttonTwoClicked()));connect(threeButton,SIGNAL(clicked()),this,SLOT(buttonThreeClicked()));connect(fourButton,SIGNAL(clicked()),this,SLOT(buttonFourClicked()));connect(fiveButton,SIGNAL(clicked()),this,SLOT(buttonFiveClicked()));connect(sixButton,SIGNAL(clicked()),this,SLOT(buttonSixClicked()));connect(sevenButton,SIGNAL(clicked()),this,SLOT(buttonSevenClicked()));connect(eightButton,SIGNAL(clicked()),this,SLOT(buttonEightClicked()));connect(nineButton,SIGNAL(clicked()),this,SLOT(buttonNineClicked()));connect(addButton,SIGNAL(clicked()),this,SLOT(buttonAddClicked()));connect(subButton,SIGNAL(clicked()),this,SLOT(buttonSubClicked()));connect(mulButton,SIGNAL(clicked()),this,SLOT(buttonMulClicked()));connect(divButton,SIGNAL(clicked()),this,SLOT(buttonDivClicked()));connect(botButton,SIGNAL(clicked(bool)),this,SLOT(buttonBotClicked()));//正负号connect(timButton,SIGNAL(clicked(bool)),this,SLOT(buttonTimClicked()));//时间connect(decButton,SIGNAL(clicked(bool)),this,SLOT(buttonDecClicked()));//点号connect(lefButton,SIGNAL(clicked(bool)),this,SLOT(buttonLefClicked()));//左括号connect(rigButton,SIGNAL(clicked(bool)),this,SLOT(buttonRigClicked()));//右括号connect(CEButton,SIGNAL(clicked()),this,SLOT(buttonCEClicked()));connect(ACButton,SIGNAL(clicked()),this,SLOT(buttonACClicked()));connect(equButton,SIGNAL(clicked()),this,SLOT(buttonEquClicked())); //等于号*/}void calculator::buttonZeroClicked()  //以下是实现相应的槽函数
{if(input=="0")input='0';else input=input+'0';inputLine->setText(input);
}void calculator::buttonOneClicked()
{if(input=="0")input='1';else input=input+'1';inputLine->setText(input);
}void calculator::buttonTwoClicked()
{if(input=="0")input='2';else input=input+'2';inputLine->setText(input);
}void calculator::buttonThreeClicked()
{if(input=="0")input='3';else input=input+'3';inputLine->setText(input);
}void calculator::buttonFourClicked()
{if(input=="0")input='4';else input=input+'4';inputLine->setText(input);
}void calculator::buttonFiveClicked()
{if(input=="0")input='5';else input=input+'5';inputLine->setText(input);
}void calculator::buttonSixClicked()
{if(input=="0")input='6';else input=input+'6';inputLine->setText(input);
}void calculator::buttonSevenClicked()
{if(input=="0")input='7';else input=input+'7';inputLine->setText(input);
}void calculator::buttonEightClicked()
{if(input=="0")input='8';else input=input+'8';inputLine->setText(input);
}void calculator::buttonNineClicked()
{if(input=="0")input='9';else input=input+'9';inputLine->setText(input);
}void calculator::buttonAddClicked()
{if(input=="0")input='+';else input=input+'+';inputLine->setText(input);
}void calculator::buttonSubClicked()
{if(input=="0")input='-';else input=input+'-';inputLine->setText(input);
}void calculator::buttonMulClicked()
{if(input=="0")input='*';else input=input+'*';inputLine->setText(input);
}void calculator::buttonDivClicked()
{if(input=="0")input='/';else input=input+'/';inputLine->setText(input);
}void calculator::buttonTimClicked() //Time
{input=QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz"); //格式化输出当前时间inputLine->setText(input);
}void calculator::buttonDecClicked() //小数点
{if(input=="0")input='.';else input=input+'.';inputLine->setText(input);
}void calculator::buttonBotClicked() //加减号
{if(input=="0")input='-';else{QString::iterator p=input.end();p--;if('-'==*p)input=input.left(input.length()-1);else input=input+'-';}inputLine->setText(input);
}void calculator::buttonLefClicked()//左括号
{if(input=="0")input='(';else input=input+'(';inputLine->setText(input);
}void calculator::buttonRigClicked()//右括号
{if(input=="0")input=')';else input=input+')';inputLine->setText(input);
}void calculator::buttonCEClicked()
{input = input.left(input.length()-1); //减去一字符inputLine->setText(input);
}
void calculator::buttonACClicked() //直接清空
{input='0';inputLine->setText(input);
}void calculator::buttonEquClicked()//等于号
{string inputTemp = input.toStdString();vector<string> expression = midToPost(inputTemp);double value = getValue(expression);if(value != INT_MAX) {input=input+"="+QString::number(value);inputLine->setText(input);}else{input=input+"=syntax error";inputLine->setText(input);}
}bool isNum(char ch) {if(ch >= '0' && ch <= '9') return true;else return false;
}bool isOperate(char ch) {if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')')return true;else return false;
}int level(char ch) {switch(ch) {case '(' :return 5;case '*' :return 4;case '/' :return 4;case '+' :return 3;case '-' :return 3;case ')':return 2;}
}
/*字符串转数字*/
double scd(string s) {if(s.length() == 0) return INT_MAX;bool flag = false;for(int i = 0; i < s.length(); i++) {if(i == 0 && s[i] == '-') continue;else if(s[i] == '.' && !flag) {if(i > 0 && isNum(s[i-1])) {flag = true;continue;}else return INT_MAX;}else if(isNum(s[i])) continue;else return INT_MAX;}double result = atof(s.c_str());return result;
}/*由中缀表达式得到后缀表达式, 向量V存储结果*/
vector<string> midToPost(string s) {stack<char> S; /*符号栈*/vector<string> V; /*后缀表达式*/int i = 0;while(i < s.length()) {if(isNum(s[i])) {string str = "";while(isNum(s[i]) || s[i] == '.') {str += s[i];i++;}V.push_back(str);}else if(isOperate(s[i])){/*负数情况*/if(s[i] == '-' && (i == 0 || !isNum(s[i-1])) {string str = "-"; i++;while(isNum(s[i]) || s[i] == '.') {str += s[i]; i++;}V.push_back(str);}else{if(S.empty()){S.push(s[i]); i++;}else {int initial = level(s[i]);if(initial == 2) {while(level(S.top()) != 5 && !s.empty()) {string str = "";str += S.top();V.push_back(str);S.pop();}if(S.top() == '(') S.pop(); i++;} else {while(!S.empty() && initial <= level(S.top()) && level(S.top()) != 5) {string str = "";str += S.top();V.push_back(str);S.pop();}S.push(s[i]); i++;}}}}else{cout << "表达式出错" << endl;V.clear();return V;}}while(!S.empty()) {string str = ""; str += S.top();S.pop();V.push_back(str);}//for(int i = 0; i < V.size(); i++) cout << V[i] << "[]";return V;
}/*后缀表达式得到最终结果*/
double getValue(vector<string> V) {stack<double> S;for(int i = 0; i < V.size(); i++) {/*操作运算符*/if(V[i].length() == 1 && isOperate(V[i][0])) {double a = 0, b = 0;if(!S.empty()) {a = S.top(); S.pop();}else return INT_MAX;if(!S.empty()) {b = S.top(); S.pop();}else return INT_MAX;switch(V[i][0]) {case '+':S.push(b+a);break;case '-':S.push(b-a);break;case '*':S.push(b*a);break;case '/':S.push(b/a);break;default:return INT_MAX;}}else {if(scd(V[i]) == INT_MAX) return INT_MAX;else S.push(scd(V[i]));}}if(S.empty()) return INT_MAX;double value = S.top();S.pop();return value;
}calculator::~calculator()
{}

如果有问题,请先 关注 + 点赞 + 收藏, 再联系 1016824906

源码链接 https://download.csdn.net/download/zycxnanwang/11224121

 

 

 

 

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

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

相关文章

chatgpt赋能python:如何打开Python黑色界面

如何打开Python黑色界面 Python黑色界面是一个流行的Python环境编辑器。很多Python开发者首选Python黑色界面来编写和运行Python程序。但是&#xff0c;很多人还不知道如何打开Python黑色界面。在这篇文章中&#xff0c;我们将介绍如何打开Python黑色界面&#xff0c;以及一些…

【无标题】分享3款好用的简易视频剪辑软件

分享3款好用的小白视频剪辑软件 本人是个短视频爱好者&#xff0c;经常需要剪辑视频&#xff0c;在实际操作中发现&#xff0c;那些专业的视频剪辑软件操作非常复杂&#xff0c;不易操作&#xff0c;而且文件又大。那些简单的视频剪辑软件小而精巧&#xff0c;操作方便&#xf…

怎么剪切视频中的一部分?不如试试这个软件

怎么剪切视频中的一部分&#xff1f;我们在进行视频剪辑的时候&#xff0c;需要导入大量的素材&#xff0c;我们不可能完整的保留整段素材。通常情况下&#xff0c;我们需要对已有的素材进行编辑分割。这里小编就来给大家介绍在电脑上对视频进行分割的方法。 怎么剪切视频中的一…

小众但意外觉得蛮好用的剪辑软件!纯良心分享

爱剪辑 有开屏广告&#xff0c;一共3个界面&#xff1a;首页、剪同款、我的。 剪辑、配乐、字幕、滤镜、加速、贴纸、配音等主流功能都有。 特色功能有剪裁视频、倒放视频、视频旋转、视频转换GIF、转场、提取音频、画中画等。 还可以拼接视频&#xff0c;不过不支持FLV等小众文…

AI伪原创混剪软件脚本,短视频伪原创剪辑工具必备神器

AI伪原创混剪脚本&#xff0c;伪原创剪辑必备神器【永久脚本详细教程】 AI伪原创混剪软件脚本&#xff0c;短视频伪原创剪辑工具必备神器 设备需求&#xff1a;电脑 软件截图&#xff1a; -------------------------------- 文章分享者&#xff1a;Linxiaoyu2022 文章的来源…

剪映电脑版超简单使用教程Mac

相机 我主要用到的两个键 点击开始创作导入本地视频 导入本地视频 将素材拖拽到时间线上 时间线面板操作 撤销、恢复、分割 撤销上一次操作也可以用快捷键 command z 定格、倒放、镜像、裁剪 剃刀 点击菜单的分割可以出来一个剃刀&#xff0c;分割更方便 选择模式 …

创业创业,有点风险,读取数据做个商务分析

1、起因 过完年了,作为程序也很老了,所以想搞个副业看看,但是盲目的创业是不行的,鲁迅先生说过:方向大于努力,所以选对方向很重要,数据调研第一步,不能盲目出招,浪费时间,浪费精力,最主要浪费我的血汗钱。 上班的时间基本都在点外卖,所以想做做外卖,因为自己是小…

精选个人创业计划

精选个人创业计划精选篇1 一、企业概况 以突出“新鲜”“精致”为主要特色。坐落于河北区昆纬路的一个小店&#xff0c;主营鲜花与礼品的零售。它没有亮丽的装潢设计&#xff0c;而是着重朴实的风格&#xff0c;突出了产品的“精”与“美”&#xff0c;成为人们五彩斑斓生活中不…

创业合伙人十个核心问题

导读&#xff1a; 我们见到&#xff0c;很多创业企业的股权分配&#xff0c;都是“时间的错位”&#xff1a;根据创业团队当下的贡献&#xff0c;去分配公司未来的利益。创业初期&#xff0c;不好评估各自贡献&#xff0c;创业团队的早期出资就成了评估团队贡献的核心指标。这导…

技术人员如何创业(1)---产品及想法

不得不说这是个浮躁的社会&#xff0c;人人在这个社会都想暴富或者成名。在这些引诱的驱使下很多人都脱离了原来的稳定工作创业。前几天看了《中国合伙人》&#xff0c;故事讲到了几个大学生从校园到工作、再到创办了一个伟大的企业&#xff0c;这个故事更加激励了创业大军的壮…

创业第一步:如何写好商业计划书

即使你的项目不需要融资&#xff0c;你也把标准商业计划书作为一个工具模板来应用&#xff0c;帮助更全面的盘点你要做的事情。 撰写一份性感的商业计划书如同造房子&#xff1a;第一步是科学设计&#xff0c;打好结构&#xff08;有清晰的撰写逻辑&#xff09;&#xff1b;第…

html表白代码!

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>跳动爱心</title><style>*{padding: 0;margin: 0;}body{background-color: pink;}#frame{position: relative;width: 400px;height: 300px…

html表白代码大全_100条代码,拿去“表白”

❤ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套) 】 &#x1…

html表白代码

目录 一.引言二.表白效果展示1.惊喜表白2.烟花表白3.玫瑰花表白4.心形表白5.心加文字6.炫酷的特效 三.点赞收藏评论找我拿源码(24小时之内回复) 一.引言 我们可以用一下好看的网页来表白&#xff0c;下面就有我觉得很有趣的表白代码。评论直接找我要源码也行。(收藏➕点赞) 二.…

表白专用代码拿走不谢

%数学之心 figure; clc; x-2:0.01:2; ysqrt(2*sqrt(x.^2)-x.^2); zasin(abs(x)-1)-pi./2; plot(x,y); grid on; hold on;%在一个图中画多个图 plot(x,z); title(); legend(心);2021.2.25追加 <!DOCTYPE html> <html lang"en"> <head><meta cha…

一个贼简单的代码表白

前一阵网上挺火的各种表白代码&#xff0c; 自己学着也做了一个 记事本编写&#xff0c;后缀改为vbs 就能运行了。 &#xff08;文章最后边有个百度云盘链接&#xff0c;可以直接下载。或者去我上传的资源也能免费下载&#xff09; &#xff08;其中有一串代码会关机的呦&#…

html,实现心动的表白代码

今天看到多年年前的大佬写的 js表白代码&#xff0c;觉得不错&#xff0c;分析给大家 代码在这宫里 Love <link type"text/css" rel"stylesheet" href"./Love_files/default.css"><script type"text/javascript" src".…

用Python给学弟准备追女神要用的多种流行的表白爱心代码【源码】

本文将介绍利用Python画多种不同的爱心形态&#xff0c;表白代码看这一篇文章就够啦&#xff0c;有感兴趣的朋友可以收藏起来。 1、三维爱心 效果图&#xff1a; 首先安装matplotlib 参考代码&#xff1a; #!/usr/bin/env python3 from mpl_toolkits.mplot3d import Axes3…

表白代码,HTML

1.在电脑桌面右击鼠标选择新建--文本文档 2.并命名为&#xff1a;biaobai.txt 3.打开并且把一下代码复制并粘贴到biaobai.txt <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd…

<C语言>简单表白代码小❤❤

这是一个简单的表白代码&#xff0c;运用了c语言的编译工具&#xff0c;因为很早之前百度来的&#xff0c;也不记得出处在哪里&#xff0c;注明&#xff1a;转载 #include <windows.h> //win头文件 #include<stdio.h> #include<stdio.h> #include<math…