目录

1.weight.ui

2.weight.h

3.widget.cpp

通过qt实现简单的+,-,*,/四则运算。

运算通过栈把中缀表达式转换成后缀表达式实现的。

1.weight.ui

ui界面

只需要在Qt Creator里拖动需要的对象,系统就会自动生成。

左边会有标签,按钮,垫子,显示等等。

就像这样。

2.weight.h

拉出weight.ui后qtcreater自动生成

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QStack>
#include <string.h>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:
//建槽void on_oneButton_clicked();void on_twoButton_clicked();void on_thrButton_clicked();void on_fourButton_clicked();void on_fiveButton_clicked();void on_sixButton_clicked();void on_sevenButton_clicked();void on_eightButton_clicked();void on_nineButton_clicked();void on_clearButton_clicked();void on_delButton_clicked();void on_dengButton_clicked();void on_addButton_clicked();void on_chengButton_clicked();void on_subButton_clicked();void on_chuButton_clicked();void on_zuoButton_clicked();void on_youButton_clicked();void on_zeroButton_clicked();private:Ui::Widget *ui;QString expression;int Priority(char ch);};#endif // WIDGET_H

3.widget.cpp

这一部分就主要靠手打了

代码如下:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);//固定窗口大小this->setMaximumSize(182,280);this->setMinimumSize(182,280);//参数可变//命名this->setWindowTitle("计算器");//删除按钮上放图片QIcon con("D:\\qtproject\\QtOnline\\qt make\\02\\photo");ui->delButton->setIcon(con);//改变按钮背景色ui->dengButton->setStyleSheet("background:blue");
}Widget::~Widget()
{delete ui;
}void Widget::on_oneButton_clicked()
{expression += "1";ui->mainlineEdit->setText(expression);
}void Widget::on_twoButton_clicked()
{expression += "2";ui->mainlineEdit->setText(expression);
}void Widget::on_thrButton_clicked()
{expression += "3";ui->mainlineEdit->setText(expression);
}void Widget::on_fourButton_clicked()
{expression += "4";ui->mainlineEdit->setText(expression);}void Widget::on_fiveButton_clicked()
{expression += "5";ui->mainlineEdit->setText(expression);
}void Widget::on_sixButton_clicked()
{expression +="6";ui->mainlineEdit->setText(expression);
}void Widget::on_sevenButton_clicked()
{expression +="7";ui->mainlineEdit->setText(expression);
}void Widget::on_eightButton_clicked()
{expression +="8";ui->mainlineEdit->setText(expression);
}void Widget::on_nineButton_clicked()
{expression +="9";ui->mainlineEdit->setText(expression);}
void Widget::on_addButton_clicked()
{expression +="+";ui->mainlineEdit->setText(expression);
}
void Widget::on_chengButton_clicked()
{expression +="*";ui->mainlineEdit->setText(expression);
}void Widget::on_subButton_clicked()
{expression +="-";ui->mainlineEdit->setText(expression);
}
void Widget::on_zuoButton_clicked()
{expression +="(";ui->mainlineEdit->setText(expression);
}void Widget::on_youButton_clicked()
{expression +=")";ui->mainlineEdit->setText(expression);
}void Widget::on_chuButton_clicked()
{expression +="/";ui->mainlineEdit->setText(expression);
}void Widget::on_clearButton_clicked()
{expression.clear();ui->mainlineEdit->clear();
}void Widget::on_zeroButton_clicked()
{expression +="0";ui->mainlineEdit->setText(expression);}void Widget::on_delButton_clicked()
{expression.chop(1);ui->mainlineEdit->setText(expression);
}void Widget::on_dengButton_clicked()
{QStack<int> s_num, s_opt;char opt[128] = {0};int i=0,tmp = 0, num1, num2;//把QString转换成char * QByteArray ba;ba.append(expression);//把QString转换成QByteArraystrcpy(opt,ba.data());//data可以把QByteArray转换成const char *while(opt[i]!='\0'||s_opt.empty() !=true){if(opt[i]>='0'&&opt[i]<='9'){tmp = tmp * 10 + opt[i] - '0';i++;if (opt[i]<'0'||opt[i]>'9'){s_num.push(tmp);tmp = 0;}}else{           //操作符if(s_opt.empty() == true || Priority(opt[i])>Priority(s_opt.top())||(s_opt.top() == '('&&opt[i]!=')')){s_opt.push(opt[i]);i++;continue;}if(s_opt.top()  == '('&&opt[i]==')'){s_opt.pop();i++;continue;}if(Priority(opt[i])<=Priority(s_opt.top())||(opt[i]==')'&&s_opt.top()!='(')||(opt[i]=='\0'&&s_opt.empty()!=true)){char ch = s_opt.top();s_opt.pop();switch(ch){case '+':num1=s_num.top();s_num.pop();num2 = s_num.top();s_num.pop();s_num.push(num1+num2);break;case '-':num1=s_num.top();s_num.pop();num2 = s_num.top();s_num.pop();s_num.push(num2-num1);break;case '*':num1=s_num.top();s_num.pop();num2 = s_num.top();s_num.pop();s_num.push(num1*num2);break;case '/':num1=s_num.top();s_num.pop();num2 = s_num.top();s_num.pop();s_num.push(num2/num1);break;}}}}ui->mainlineEdit->setText(QString::number(s_num.top()));expression.clear();
}
//定义优先级
int Widget::Priority(char ch){switch(ch){case'(':return 3;case'*':case'/':return 2;case'+':case'-':return 1;default:return 0;}
}

最后实现运行大概是这样子的:

QT实现简易计算器。相关推荐

  1. Qt项目一:简易计算器

    Qt项目一:简易计算器 用Qt开发简易计算器较简单,可做为初学者项目学习. #效果图 #主要代码 ##ui界面界面设计 ##准备 头文件中新建a.b分别储存数据和运算符 private:Ui::Wid ...

  2. C++ Qt学习笔记 (1) 简易计算器设计

    最近开始学习c++ qt, 按照教材上的例程设计一个简易的桌面计算器: Qt是一个基于C++语言的跨平台应用程序和UI开发框架,主要包含一个类库,和跨平台开发及国际化的工具,最初由挪威的Trollte ...

  3. QT学习日志(附:简易计算器,qq登录界面,简易绘图板,植物大战僵尸魔改版项目实践)

    目录 写在前面 实训前一天 头文件无法生成 项目栏不见了 不知道如何发布程序 实训第一天(附简易计算器的实现) 自定义命名空间的相关问题 关于隐式调用构造函数的问题 实训第二天(不附地址薄的实现) 关 ...

  4. QT入门项目--简易计算器

    QT入门项目–简易计算器 目录 QT入门项目--简易计算器 一.前言 二.运行界面 三.代码 dialog.cpp doexpr.cpp check.cpp 四.总结 一.前言 C语言快要结课了,自然 ...

  5. C++/Qt框架下的简易计算器

    C++/Qt框架下的简易计算器 1.简易计算器-介绍 该项目目标是设计开发一个支持连续计算的简易计算器,通过单击按钮,输入并完成如4+5+6或5×8+16类似的各种连续计算,并将运算结果显示在输出文本 ...

  6. QT专题1:实现一个简易计算器

    QT程序开发流程如下: 1.申明必要的部件. 2.将部件构造出来 3必要的布局 4.前后台进行关联 5.美化(QSS) QT基础部件: 1.按钮类:普通按钮,工具按钮,单选按钮,多选按钮,命令连接按钮 ...

  7. linux qt小型计算器课程设计,用Qt设计一个简易计算器

    Qt工作原理: 事件驱动,信号与槽原理. 要实现简易计算器的设计需要将界面按钮转到槽,具体程序如下: Widget.h : #ifndef WIDGET_H #define WIDGET_H #inc ...

  8. PyQt5 简易计算器

    剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它 [知识点] 1.利用循环添加按钮部件,及给每个按钮设置信号/槽 2.给按钮设置固定大小:button.setFixedSi ...

  9. 基于qt的计算机论文,基于qt的科学计算器的设计与实现本科毕业论文.doc

    基于qt的科学计算器的设计与实现 摘 要 随着科技的飞速发展,人类已经进入信息化的大时代.信息技术发展更是日新月异,计算器已经进入而且融入人们生活的各个领域,在现代生活中无处不在,大型复杂的计算是人脑 ...

最新文章

  1. sklearn 相似度矩阵_精简易懂,30 分钟学会 SVD 矩阵分解,很强!
  2. 当img 路径为空时不显示x号
  3. 使用下列 else-if 排列来处理多个条件:
  4. Electron中实现菜单、子菜单、以及自带操作事件
  5. NYOJ 84 阶乘的0 数论
  6. 聊聊Service(一)
  7. Exchange 2016部署实施案例篇-04.Ex基础配置篇(下)
  8. 【数据库系统】为什么使用SQL而非C/C++的函数库执行数据库查询操作
  9. Netty技术细节源码分析-FastThreadLocal源码分析
  10. kafka笔记——入门介绍
  11. 从零构建一个图像分类项目 -- 代码
  12. php压缩html文件,压缩html_PHP压缩html的函数代码
  13. solidworks分析视频教程-结构应力仿真有限元虚拟样机及流场分析
  14. 马尔可夫链、隐马尔科夫模型、贝叶斯网络、因子图
  15. 证券secuerity英语
  16. 非计软专业的学生也能看懂的面向对象编程(《面向对象编程是怎样工作的》平野章/著 读书笔记)
  17. Microsoft.NET Framework 3.5Service Pack1下载Windows功能失败原因
  18. 在我的电脑里计算机管理在哪里,电脑控制面板在哪里查找步骤 一起了解下吧...
  19. Python遍历目录下的文件(os.walk 、os.listdir的用法)
  20. ps计算机网络海报,PS教程:Photoshop制作星空云海创意海报

热门文章

  1. 2、使用Xcode9创建第一个IOS界面
  2. 如何使用ArcGIS从天地图中提取水系
  3. ENGLISH资料收集(18)-蔬菜名
  4. 【vbers】ibv_req_notify_cq()
  5. 007 矩阵的秩定义、秩求法、秩的性质
  6. mysql中起飞到达城市查询_SQL航空网的几个航班查询题:
  7. Mac pro 常用快捷键大全
  8. 王兴:格局上输了,不管你多努力都不可能赢!
  9. super-tinypng压缩图片
  10. android 获取wifi和移动网络信号强度