QT实现简易计算器。
目录
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实现简易计算器。相关推荐
- Qt项目一:简易计算器
Qt项目一:简易计算器 用Qt开发简易计算器较简单,可做为初学者项目学习. #效果图 #主要代码 ##ui界面界面设计 ##准备 头文件中新建a.b分别储存数据和运算符 private:Ui::Wid ...
- C++ Qt学习笔记 (1) 简易计算器设计
最近开始学习c++ qt, 按照教材上的例程设计一个简易的桌面计算器: Qt是一个基于C++语言的跨平台应用程序和UI开发框架,主要包含一个类库,和跨平台开发及国际化的工具,最初由挪威的Trollte ...
- QT学习日志(附:简易计算器,qq登录界面,简易绘图板,植物大战僵尸魔改版项目实践)
目录 写在前面 实训前一天 头文件无法生成 项目栏不见了 不知道如何发布程序 实训第一天(附简易计算器的实现) 自定义命名空间的相关问题 关于隐式调用构造函数的问题 实训第二天(不附地址薄的实现) 关 ...
- QT入门项目--简易计算器
QT入门项目–简易计算器 目录 QT入门项目--简易计算器 一.前言 二.运行界面 三.代码 dialog.cpp doexpr.cpp check.cpp 四.总结 一.前言 C语言快要结课了,自然 ...
- C++/Qt框架下的简易计算器
C++/Qt框架下的简易计算器 1.简易计算器-介绍 该项目目标是设计开发一个支持连续计算的简易计算器,通过单击按钮,输入并完成如4+5+6或5×8+16类似的各种连续计算,并将运算结果显示在输出文本 ...
- QT专题1:实现一个简易计算器
QT程序开发流程如下: 1.申明必要的部件. 2.将部件构造出来 3必要的布局 4.前后台进行关联 5.美化(QSS) QT基础部件: 1.按钮类:普通按钮,工具按钮,单选按钮,多选按钮,命令连接按钮 ...
- linux qt小型计算器课程设计,用Qt设计一个简易计算器
Qt工作原理: 事件驱动,信号与槽原理. 要实现简易计算器的设计需要将界面按钮转到槽,具体程序如下: Widget.h : #ifndef WIDGET_H #define WIDGET_H #inc ...
- PyQt5 简易计算器
剩下计算函数(self.calculator)未实现,有兴趣的朋友可以实现它 [知识点] 1.利用循环添加按钮部件,及给每个按钮设置信号/槽 2.给按钮设置固定大小:button.setFixedSi ...
- 基于qt的计算机论文,基于qt的科学计算器的设计与实现本科毕业论文.doc
基于qt的科学计算器的设计与实现 摘 要 随着科技的飞速发展,人类已经进入信息化的大时代.信息技术发展更是日新月异,计算器已经进入而且融入人们生活的各个领域,在现代生活中无处不在,大型复杂的计算是人脑 ...
最新文章
- sklearn 相似度矩阵_精简易懂,30 分钟学会 SVD 矩阵分解,很强!
- 当img 路径为空时不显示x号
- 使用下列 else-if 排列来处理多个条件:
- Electron中实现菜单、子菜单、以及自带操作事件
- NYOJ 84 阶乘的0 数论
- 聊聊Service(一)
- Exchange 2016部署实施案例篇-04.Ex基础配置篇(下)
- 【数据库系统】为什么使用SQL而非C/C++的函数库执行数据库查询操作
- Netty技术细节源码分析-FastThreadLocal源码分析
- kafka笔记——入门介绍
- 从零构建一个图像分类项目 -- 代码
- php压缩html文件,压缩html_PHP压缩html的函数代码
- solidworks分析视频教程-结构应力仿真有限元虚拟样机及流场分析
- 马尔可夫链、隐马尔科夫模型、贝叶斯网络、因子图
- 证券secuerity英语
- 非计软专业的学生也能看懂的面向对象编程(《面向对象编程是怎样工作的》平野章/著 读书笔记)
- Microsoft.NET Framework 3.5Service Pack1下载Windows功能失败原因
- 在我的电脑里计算机管理在哪里,电脑控制面板在哪里查找步骤 一起了解下吧...
- Python遍历目录下的文件(os.walk 、os.listdir的用法)
- ps计算机网络海报,PS教程:Photoshop制作星空云海创意海报