震惊!!用图形界面装B居然只需要短短110行代码!!
来源:互联网 发布:脚本启动java main 编辑:程序博客网 时间:2024/05/01 11:47
[序]
相信学习C或者C++的学生的最大的痛苦就是每次做的东西的都是CMD的黑框框
虽然很多人会慢慢爱上这个(呸),但是绝大多数的人都走向了另外一条路:图形界面
说到C++的图形界面,都不得不谈一下QT了
QT的教程,资源网上是能找到不少的。(不过最难可能是一般人都不知道自己该搜索些什么)
先推荐一些网站吧,我个人也是在这个收益良多。
QT开源社区
豆子的QT学习之路
我只能说自己在这里确实能找到一些东西,算是福利吧。
[开头]
标题说是用用来装B的QT,只用110行,我觉得是可以的。
不是说是那种只是个弹出一个messageBox 那还真的是无聊。
其实如果你有幸得到一些人的教导的话,你一定会是知道,只是看一个GUI的那种界面,那其实是相当简单的。你只需要理解这些东西的基本概念你就可以做到了。(或者是用QT自带的QT designer 那也是非常简单的,拖鼠标懂么?大概就是这个难度)
但是要是想要搭建,在一般的内部运行程序和光鲜的GUI之间的桥梁 ,我个人还是推荐先去把Class那些东西看一看。虽然你的实现代码可能会比较简单,你记肯定也是可以记得住的,但要是把Class的东西也看看,那将会是收益匪浅的。(我在我的博客当中也是存有一些关于数据结构的文字,不敢称文章,有兴趣可以去翻一翻)
[正题]
今天我们讲这个110行代码实现这个装B,其实是非常可能的。
本次会围绕着一个很简单的数据结构的设计,也就是——计算式的计算。(很明显我已经忘了这个东西叫什么名字了,但理解就好了)
举个例子: 输入1+2*2 ,然后输出 5。输入(1+2)*2,输出 6
这就是一个算数的机制。如果按照标准库去做的话,其实也不是很难。
但这就是QT集成C++之后的强大之处了。内部有很多很有趣的函数。比如mid函数,就可以完成QString截取的工作。(PS: QString 是QT自带的一个类似于string的东西,我们从各个接口上得到的信息,或者是要在各个接口上显示,都必须要使用这个东西)
[算法]
就是按照栈的思路进行实现的,用操作符栈和数字栈两个来做为辅助。
[代码]:不算系统自动生成的代码段,确实只有110行左右(所附即是mainwindow.cpp文件,但包含系统自动生成的20-30行的代码,都才只有140行,应该算是一个比较小的程序了)
#include "mainwindow.h"#include "ui_mainwindow.h"#include <stack>#include <QMessageBox>using namespace std;MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->lineEdit->setFocus();}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_lineEdit_returnPressed(){ QString s = ui->lineEdit->text(); ui->lineEdit->clear(); s = s.remove(" ");//remove the white space. if (s.toLower() == "quit") { this->close(); } stack<double> sn; stack<QChar> sc; for (int i = 0; i < s.size();) { if(s[i] >= '0' && s[i] <= '9') { int j = i + 1; for (; j < s.size() && ((s[j] >= '0' && s[j] <= '9') || s[j] == '.'); ++j); if (j < s.size()) { sn.push(s.mid(i,j-i).toDouble()); i = j; } else { sn.push(s.mid(i,j-i).toDouble()); i = j + 1; } } else if (s[i] == '*' || s[i] == '/' || s[i] == '('){ sc.push(s[i]); i++; } else if (s[i] == '+') { if (!sc.empty() &&sc.top() == '*') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x * y); } else if (!sc.empty() &&sc.top() == '/'){ double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x / y); } else { sc.push(s[i]); } i++; } else if (s[i] == '-') { if (!sc.empty() && sc.top() == '*') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x * y); } else if (!sc.empty() &&sc.top() == '/'){ double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x / y); } else { sc.push(s[i]); } i++; } else if (s[i] == ')') { if (!sc.empty() &&sc.top() == '(') sc.pop(); else if (!sc.empty() &&sc.top() == '+') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x + y); sc.pop(); } else if (!sc.empty() &&sc.top() == '-') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x - y); sc.pop(); } else if (!sc.empty() &&sc.top() == '*') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x * y); sc.pop(); } else if (!sc.empty() &&sc.top() == '/') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x / y); sc.pop(); } i++; } } while (!sc.empty()) { if (sc.top() == '('){ sc.pop(); continue; } else if (!sc.empty() &&sc.top() == '+') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x + y); } else if (!sc.empty() &&sc.top() == '-') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x - y); } else if (!sc.empty() &&sc.top() == '*') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x * y); } else if (!sc.empty() &&sc.top() == '/') { double x = sn.top(); sn.pop(); double y = sn.top(); sn.pop(); sn.push(x / y); } sc.pop(); } ui->textEdit_2->setText(s+"="+QString::number(sn.top())+'\n'+"Success calculate!");}
这就是我的代码实现了,要是有什么不懂,评论区可以评论,给我发CSDN的私信也是可以的。
我是肥宅_Sean 欢迎大家一起学习!
你的关注本身就是对我的支持!
但为了鼓励我更努力的发博文,欢迎下载只有一两个资源点的源码!谢谢!
点击打开下载链接
- 震惊!!用图形界面装B居然只需要短短110行代码!!
- 多线程只需要2行代码
- 震震震震震震震惊!20行代码能干嘛?
- 震惊!!C语言中动态开辟居然...
- 震惊,我居然开启了博客
- 简单封装一个AlertDialog,调用只需要两行代码
- 短短不足10行的代码每行都报错,跪求经验值啊
- 震惊,国内空姐居然集体贩卖原味内裤【组图】
- 震惊!恐怖的血吸虫居然出现在花盆里!
- 震惊!!!平衡二叉树居然还有这种学习方法!!
- 只需要简单几行代码,便可以实现UITableView的自适应高度。。。。
- 设置EditText光标到输入末尾只需要几行代码
- 发文章居然需要审核?
- 震惊!
- 震惊
- 震惊:Vista竟只支持SQL Server 2005
- 震惊!用了此方法后,TLE的代码AC了!
- 今天我被震惊了,vc2005居然犯这么一个低级的错误
- NOIP 2005普及组 采药 详解
- Java多线程之单例模式-yellowcong
- 数据库中的约束
- 深入浅出的强化学习笔记(一)——概述
- Spring框架分为哪七大模块
- 震惊!!用图形界面装B居然只需要短短110行代码!!
- Simpsons’ Hidden Talents HDU
- 重载移动平台生产厂家
- JS 基础 —— ECMAScript 引用类型
- hdu-4777Rabbit Kingdom 树状数组
- Java异常处理中try{}catch抛出异常,后面代码还会继续执行么?
- QT中获取发送者信号信息
- Redis不同数据类型的常用操作
- 【九】Java IO流(下)