震惊!!用图形界面装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 欢迎大家一起学习!

你的关注本身就是对我的支持!

但为了鼓励我更努力的发博文,欢迎下载只有一两个资源点的源码!谢谢!

点击打开下载链接

原创粉丝点击