• 带UI的小初高数学学习软件—和partner G艰难地用C++(QT库)实现的过程


     

     

     

    从互相了解对方的代码思路然后确定用C++编写,到用win32写界面时变得摇摆不定的考虑着要不要改变语言,再到用QT写完界面后发现短信接口一般都不提供C++,最后到QT打包出来的可执行文件在别的设备上无法运行,可谓是道路坎坷,一路磨难。

     

    在结对项目开始前,就已经和partner G互相阐述并了解对方的代码逻辑和思维,在讨论后,一致认为使用首先生成题库然后再从题库中抽题的形式好,既保证了题目不会重复,又较运行时再生成题目的形式反应更快。而这份代码是用C++写的,因而一致决定继续使用C++作为编程语言去实现结对编程项目需求。天真的认为只需要编写一个UI然后套用个人项目的代码就可以了

     

    【win32/windows api尝试】

    秉着java能用swing写UI,C++也肯定能用windows api去写UI的,于是入了一个大坑,使用win32去写界面,但是繁杂多样的api写一个窗口都需要不短的代码,在了解了HWND句柄、WinMain函数后,发现我们压根没有那么多的时间去学习那么多的基层的东西,就不得不放弃,然后在考虑是否需要换java去完成该项目。

     

    【QT库带来的快捷UI入门】

    在考虑了MFC和一些其他的C++编写窗口的工具后,决定选择了较易上手的QT库。然后发现真的容易上手,就和做ppt一样,就简单的做出了项目需求中的UI界面,把各个窗口之间的逻辑写好后,粗糙的UI基本就有了。账号密码的存储、题库的读写、出题的查重以及出题的卷子生成对应的时间戳txt,均直接套用个人项目的代码即可。

     

    【题库答案选项的编写】

    起初认为题库答案生成只是一个小问题,但当开始着手做时,发现并不是那么简单的,尤其是括号的处理,使得计算答案变得不易。partner G机智的使用了栈先进后出的特性,将操作数和操作符分别用两个栈储存,考虑优先级,让优先级高的操作符先出栈,然后该方式定义计算的时候,由于是先进后出,对于操作数来说是逆着计算的,因而除号优先级级高于乘号,减号优先级高于加号。经过一层层测试修改,小初高均生成了1000题的题库给QT使用。同时也和partner G一块将粗糙的UI界面做了美工,主要是依靠partner的审美,使得UI变得精致起来。

     

    【验证码短信的艰难】

    验证码短信,因为身边的同学用java编写的时候都说不难,所以自己也没觉得这功能实现是多大点事儿,直到真正开始做的时候……

    那天中午一口气注册了五六个短信平台,包括腾讯云、阿里云等大公司,结果发现都没有对应C++的SDK或者api接口,然后也就一个个去询问个平台的客服,但他们基本没有提供什么有用的信息,之后在秒赛平台上找到了C++代码的demo,但是苦于libcurl库的安装不成功,仍旧无法实现。最后是询问陆老师确认没有接口是行不通的情况下,大胆一试,决定使用java实现短信功能,然后再用C++去调用。当然,从结果来看,我们当然是成功了。但本质上来说原理并不复杂,只是简单的利用cmd去调用打包好的发短信的jar程序,不需要java与c++直接的沟通,因为java程序只起到一个代替c++发送验证码的作用罢了。

     

    【将QT库程序打包且能在无QT环境下的设备运行】

    这是成功前的最后一座大山,看着那个生成的活泼可爱的exe程序,却无法运行,只会“应用程序缺少xxx.dll”“应用程序无法正常启动0xc000007b”。中间百度谷歌试过各种办法,问过上一届学长,均找不到解决办法,最后的问题的根源是在32位和64位的QT控制台上。解决方式见CSDN(原创) https://blog.csdn.net/qq_40685445/article/details/101573311

     

       至此。项目小初高数学学习软件完工。

     

     

     

     

    一点点经验:

    1. 有问题别退缩,迎难而上,但也要适当的另辟蹊径,就像简单的用c++调用java程序而避开了不提供c++接口无法发送短信的问题。
    2. 谷歌百度多多益善。不管做什么,问题肯定是有的,多多使用百度,百度不到用谷歌,将大问题细化为几个小问题再逐个击破。
    3. 多精一门语言。别怀里抱着c++当宝贝,热度排前的python、java为何不好好学学呢?
  • 相关阅读:
    yolov3计算mAP
    ESP32 ADC的坑
    DCNv2编译过程报错:error: identifier "THCudaBlas_SgemmBatched" is undefined
    Arduino在Lib中输出调试参数
    ESP32获取WT901CTTL/232四元数
    常用公共前端CDN库
    js / php 网站底部版权文字自动改变年份
    以管理员身份在当前目录打开命令行窗口
    【JavaScript】提取字符串里的分数,及计算平均分并与平均分比较输出
    添加谷歌翻译到你的网站
  • 原文地址:https://www.cnblogs.com/cc1551/p/11604917.html
Copyright © 2020-2023  润新知