这次这个简陋的程序终于发布了,其实发布很简单(在windows平台),因为使用的是vs2008+qt4.7的组合,在微软自家平台上用一用还是很方便的,只需要在release编译生成的exe文件,加上几个vs2008的.dll和qt的.dll动态链接库即可。

百度网盘下载地址:http://pan.baidu.com/s/1c20wbIg

之前的四则运算的代码转移到了一个头文件中,这样做工程的时候能方便调用。内容其实变化不大,主要有两点:1,把之前的主函数改成了一个普通函数string pmaker(),功能是随机出一个标准题目,返回值就是返回的string类型的算式。2,新增了一个将string类型转化为其他类型的泛型函数,用来处理用户的输入,方便和标准答案作对比。

下面记录一下代码,对qt不太熟悉,先把学会了的记录下来,以后忘了还可以回来查看。

1,main函数。

int main(int argc, char *argv[])
{
QApplication a(argc, argv); //生成一个程序a
MyClass w; //MyClass是一个窗口类
w.show(); //显示一个窗口
return a.exec(); //程序a进入实践循环
}

这个是qt工程自己生成的,对于QT这样的图形编程来说,一般都是逻辑绘图分离的,QApplication代表一个程序,MyClass代表一个窗口。一个程序可以有多个窗口。最后,return a.exec(),相当于把程序运行交给Qt处理,进入程序的循环状态。 而 return 0; 程序就直接退出了,不能达到显示的效果。

2,myclass.h

class MyClass : public QMainWindow
{
Q_OBJECT public:
MyClass(QWidget *parent = , Qt::WFlags flags = );
~MyClass();
private slots:
int OnBtnOK(); //下一题按钮按下时触发。
int OnEnterOk();//在答题框按下回车时触发。
private:
QString pshow();//用来显示出的题目,返回出的题目的string
int pjudge(QString s,QString as);//判断答案是否正确
QString qss;//用来存放题目的string
int score;//用来存放得分
int difficulty_index;
Ui::MyClassClass ui;
};

myclass类主要是这些东西,两个slots(槽)函数,用来接收按钮或回车发出的signal(信号)。还有其他函数,注释写了大概功能,后面会介绍到。

3,myclass.cpp的内容

MyClass::MyClass(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
qss = pshow(); //出题,显示到linetext中。并用qss保存下来。
score = ; //得分初始化。
connect(ui.PBtNext,SIGNAL(clicked()),
this,SLOT(OnBtnOK()));//连接pushbutton和该类的对象。
connect(ui.lineEdit_answer,SIGNAL(returnPressed()),
this,SLOT(OnEnterOk()));//连接lineedit和该类的对象。
}

myclass的构造函数,在myclass类被实例化后会执行,因为我们的软件打开后便要出题,不需要其他额外操作,所以在构造函数里就有出题的函数,开始便会调用,同时把score初始化为零。两个connect把下一题这个按钮和onbtnok()这个函数连接起来,一点击按钮便会执行这个函数。下面的同理,只不过触发条件变成在lineedit输入东西后,光标还在lineedit里面,这样按回车键便会触发onenterok()这个函数。这两个函数都需要自定义。

QString MyClass::pshow()
{
QString pstring;
pstring = GBK::a2w(pmaker());
ui.lineEdit_problem->setText(pstring);
return pstring;
}

这个函数pshow()用来在lineedit里面显示题目,由于QT有自己的string类型,叫Qstring类型,为了跨平台考虑,用的是Unicode编码,而string是GBK编码,如果直接显示我们函数得到的结果会是乱码,所以我们先要把显示的题目转化成Unicode编码,这就需要GBK类里面的a2w方法,这个方法把窄字符转换成宽字符,即把GBK编码转化成Unicode编码,也就是把string转化成Qstring。转化后再输出。用lineEdit的setText方法。lineEdit_problem是lineedit的一个实体。表示出题框。

int MyClass::pjudge(QString s,QString as)
{
string sp = GBK::w2a(s);
double result = calculateRPN(convert2RPN(sp));
string an = GBK::w2a(as);
double answer = stringToNum<double>(an);
if (abs(result-answer)<0.1)
{
return ;
}
else
{
return ;
}
}

pjudge()函数是判断用户输入答案和标准答案是否一致的。它接收一个pmaker()生成的题目,它是Qstring类型的,所以转化成string类型在处理,用户输的答案也一样,若二者一致,则返回1,若二者不一致,则返回0。

int MyClass::OnBtnOK()
{ int flag =pjudge(qss,ui.lineEdit_answer->text());
if (flag)
{ QMessageBox::information(this,"OK","");
score++;
}
else
{
QMessageBox::information(this,"NO","You are wrong");
}
ui.lineEdit_current->setText(GBK::a2w(itos(score)));
ui.lineEdit_answer->setText("");
qss = pshow(); return ;
}

这个是槽函数,当点击了下一题按钮就会触发,pjudge判断正误,正确总分加一,其实之前控制台程序分数比这复杂,但是由于主函数被封装了,只有一个返回值,返回了题目,就没法返回难度值了。算是有个小难点,不过其实给myclass增个属性用来记录难度值就行可以了,相当于全局变量。目前尚未实现。

int MyClass::OnEnterOk()
{ MyClass::OnBtnOK();
return ;
}

这个函数其实是跟上个函数一样的 ,就是调用了上个函数,不过这是跟lineEdit_answer即答案栏连接在一起的,光标在答案栏只要一按回车就能触发了,就是可以判定输入答案,弹出对错框,然后再按回车,对错框消失,直接输入下一题,整个过程不用操作鼠标,也不用其他操作,使用很流畅,非常酸爽。

【第五周】四则运算GUI的更多相关文章

  1. 201771010134杨其菊《面向对象程序设计(java)》第十五周学习

    第十五周学习总结 第一部分:理论知识 JAR文件: 应用程序首选项存储: Java Web Start JAR文件: 1.Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar ...

  2. 20175126《Java程序设计》第五周学习总结

    # 20175126 2016-2017-2 <Java程序设计>第五周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第六章,本章内 ...

  3. “Hello World!”团队第五周第六次会议

    “Hello World!”团队第五周第六次会议   博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八.checkout& ...

  4. 2017面向对象程序设计(Java)第十五周学习总结

    上周,老师要求同学们自学应用程序部署,并布置了相关的实验任务.此次实验的目的是掌握Java应用程序的打包操作:了解应用程序存储配置信息的两种方法: 了解Applet小应用程序的开发及应用方法:掌握基于 ...

  5. “Hello World!”团队第五周第一次会议

    今天是我们团队“Hello World!”团队第五周召开的第一次会议,欢迎我们的新小伙伴刘耀泽同学.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.Todo List 六.会议 ...

  6. “Hello World!“”团队第五周召开的第二次会议

    今天是我们团队“Hello World!”团队第五周召开的第二次会议.也祝大家双十一快乐~~博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七 ...

  7. “Hello World!”团队第五周第三次会议

    今天是我们团队“Hello World!”团队第五周召开的第三次会议. 双十一大家过的怎么样?由于组内其他成员被“剁手”,今日会议记录由我来写. 博客内容: 一.会议时间 二.会议地点 三.会议成员 ...

  8. 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周

    java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...

  9. 201271050130-滕江南-《面向对象程序设计(java)》第十五周学习总结

    201271050130-滕江南-<面向对象程序设计(java)>第十五周学习总结 博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.c ...

  10. 201871010111-刘佳华《面向对象程序设计(java)》第十五周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第十五周学习总结 实验十三  Swing图形界面组件(二) 实验时间 2019-12-6 第一部分:理论知识总结 5> ...

随机推荐

  1. Django 中跨 app 创建外键、多对多引用的方法

    问题描述 我的 Django 项目中有两个 app. 在 PersonalCenter app下的 models.py 下定义了一个 Footprint 类: 在 LoginAndRegister a ...

  2. 20155308 加分项——C语言实现Linux的pwd命令

    20155308 加分项--C语言实现Linux的pwd命令 实现要求 学习pwd命令 什么是pwd pwd' 代表的是'Print Working Directory'(打印当前目录).如它的名字那 ...

  3. 20155308 2016-2017-2 《Java程序设计》实验3

    20155308 2016-2017-2 <Java程序设计>实验3 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 敏捷开发是一种以人为核心.迭代.循序渐进的 ...

  4. 20155323 2016-2017-2 《Java程序设计》第一周学习总结

    20155323 2016-2017-2 <Java程序设计>第一周学习总结 1.浏览教材,根据自己的理解每章提出一个问题 第一章:既然JDK本身附有一个JRE,那么JRE和JDK的区别在 ...

  5. 20155327 实验一《Java开发环境的熟悉》实验报告

    实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 JVM.JRE.JDK的安装位置与区别: 命令行运行javac:jav ...

  6. WPF 带刻度的滑动条实现

    原文:WPF 带刻度的滑动条实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83507170 ...

  7. git在windows7下面使用

    1. 首选安装. 2. 打开Git Bash 3. 输入,就是配置一下用户名啥的 $ git config --global user.name "Jack Liao" $ git ...

  8. cogs2223 [SDOI2016 Round1] 生成魔咒

    cogs2223 [SDOI2016 Round1] 生成魔咒 原题链接 题解 暴力:每次更新后缀数组??? set+二分+hash暴力 http://paste.ubuntu.com/2549629 ...

  9. MES与ERP的区别(转)

    MES和ERP有很大的不同,主要体现在以下几个方面: 1.管理的目标不同 ERP的重点在于财务,也就是从财务的角度出发来对企业的资源进行计划,相关的模块也是以财务为核心的展开,最终的管理数据也是集中到 ...

  10. GitHub中webhooks的使用

    目录 GitHub中的webhooks的配置 对配置的webhooks的进行测试 目前在团队在设计一个应用管理的功能,需要了解到常用代码托管的Webhooks的使用.GitHub中的webhooks首 ...