结对编程收获——UI真的没有那么简单

                                                     詹元成

初看作业要求,心里还有一点欣喜,不就是做一个UI嘛,拖拖按钮差不多就解决了(之前也确实做过一些简单的UI)。

但做到第三天的时候,开始感概——UI真的没有那么简单

以下是我对本次结对编程、接口处理、技术学习的收获。(有兴趣的读者可以先阅读我们的UI界面博客 http://www.cnblogs.com/ustctp/p/8847361.html

一、结对编程

(1)前期沟通很重要

因为我和伙伴并不是在同一个班或同一个寝室,两人一开始并没有合上拍。

我们就选用MFC还是QT、用哪种语言开发、谁做领航员谁做驾驶员等问题存在一定的讨论。这样的结果导致项目拖了两三天还没有开工。

后来觉得这样不行,我专门去了他寝室讨论了一个小时,就全部规划好PSP和具体分工,使得后面的结对编程效率一直很高,双方分工特别明确。

(2)各取所长效率高

由于结对编程组织性强,因此可以有效地利用各种资源,进行最佳的组合。比如在此次结对编程中,我的小伙伴有Java的GUI开发经验,而我对C++相对较熟,

我们得到了一个人编程体会不到的“各取所长”的优势。也就是说,当我们面对一个程序问题的实现方式时,如果其中一个人对某一些语句的书写很熟练而另一者不是很熟练,

那么熟练者可以快速书写代码,另一人在旁边积极提出有益的建议。这样,就较少出现个人编程过程中常有的“阻塞”情形,从而提升了编程的效率。

也正因如此,通过结对编程,我们俩的磨合速度很快,而且也很好的促额团队中的沟通交流。

(3)团队合作收获多

如果是一个团队进行软件开发,那么可以将软件的开发分为若干个部分,而每个部分由若干个2人小组共同开发。当然也不是所有的开发流程都需要结对编程,如果子项目的难度较低,

那么单人开发即可。比如我们的团队项目主要分为前端开发和后端开发,那么前端开发和后端开发中较难的开发部分可以用结对编程进行解决,而相对较简单的开发部分就由个人能力相对较强的同学完成。

二、接口处理

(1)处理好“三”组=处理好全部组

由于最初设计时没有明确的标准,导致一个组一个标准,可能有的UI组会说 “标准相近的还好说,标准差别较大的组对接起来真的是想死的心都有了。”当初老师没有规定标准,其实是想让大家尽快抢夺标准的制定权,这在实际的工业界也是一样的。在我扎扎实实对接了全部15组core后,抛开个别组API写得不是特别友好外,真的是只要对接好3组,其余就是流水线工作了。

以下就是三“种”API方式

1.lib +dll +h+string模式

这种模式是最标准的对接方式,我们只需要配置好lib、dll、h,、传参形式后,将string中的内容读入我的QT变量中便可完成。

2.lib +dll +h+txt模式

这种模式是也比较常见的对接方式,我们需要配置好lib、dll、h,、传参形式,打开txt中的内容,读文件中数据进入我的QT变量中可完成。

3.h模式

也有少数几个组采用这种对接方式,并不推荐这种方式,暴露了源代码。不过这种对接倒是最简单的,只需添加头文件,定义一下传参即可。

在我完成这三种模式的对接接口后,剩下的12组对接起来就比较快了。所以我想说处理好三组=处理好全部组。UI对接并没有想象中那么麻烦。

(附QT标准对接步骤)

1.把 .h 与 .lib/.a 文件复制到程序当前目录下,然后再把dll文件复制到程序的输出目录

2.在pro文件中,添加 .lib 文件的位置: LIBS+= -L D:/hitempt/api/ -l myDLL

​   -L 参数指定 .lib/.a 文件的位置

​   -l 参数指定导入库文件名(不要加扩展名)

3.在程序中include头文件

(2)对接的一些建议

一个良好的接口应该在一开始就设计好,然后大家统一好标准:给用户哪些部分,是用什么形式封装,传递参数的定义等诸如此类。

虽然说对接好三组就能完成全部对接,但对于UI组来说,因为API的五花八门,在此提出一些对接的建议。

core组在提交dll时一定要确保自己多次检查后程序无误,不然ui组总会怀疑自己的操作出了问题从而浪费大量时间用来查错;

三、技术学习

总的来说,这次结对编程学到了许多知识,“QT七天——从入门到精通”。

下面是我对QT的一些理解

(1)qt creator报错 error: C1083: 无法打开包括文件:“Untitle”: No such file or directory

这其实并不是代码错误,而是编译器本身的问题,采用如下方法解决。

清理下项目。

  菜单——build——run qmake

  一定要执行qmake,不能只清理项目!!!!

(2)定时器 QTime类

用好这个类并不是特别简单的,但有没有快速上手的办法呢,有的

微机原理大家都学过,通过观察可以发现,这个定时器和其中的定时中断有异曲同工的地方。

会写定时中断,仿照一下,确实能快速使用好QTime。

(3)成员变量和局部变量

对可能会修改的对象定义为成员变量,对只用一次的对象设为局部变量;所有MainWindow 类内定义的对象全部建立在堆上,所有主函数新定义的对象全部建立在栈上,

这样使用bug率最低。

(4)中文字符

其实也是编码方式的问题,解决如下

改变字符编码

// 采用文字编码转换类QTextCodec
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
//如果是Qt4版本的,还可以设置tr进行中文转换
QTextCodec::setCodecForTr::QTextCodec::codecForName("utf-8"));
//Windows下,一般情况下设置gb18030就可以显示中文了

总结

这次结对编程还是收获颇丰的,每一次作业,自己能有很多提高,就是最好的收获。

结对编程收获——UI真的没有那么简单的更多相关文章

  1. 结对编程收获-Core10组-PB16110698

    本周结对编程追加作业:记录收获.坦白说,我的收获多而杂,一时不知从何说起,以下试图从各方面简要谈谈. 一.编程能力收获 从编程能力方面,我收获的主要是类的设计思路和算法设计.在作业要求blog的指引下 ...

  2. 结对编程——带UI的小初高数学学习软件

    一.简介 本次项目要求: 1.所有功能通过图形化界面操作,可以是桌面应用,可以是网站(编程语言和技术不限): 2.用户注册功能.用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册: ...

  3. 结对编程(Python实现)

    一.Github地址:https://github.com/nullcjm/mypage 项目搭档:3117004662梁子豪 3117004648陈俊铭 二.PSP表格: PSP2.1 Person ...

  4. 结对编程总结(胡超慧&&王宇)

    在分析完需求的几秒中内,我和搭档就蒙了,因为之前并没有做过UI,因此这次的项目对于我们来说无疑是一个陌生的挑战. 为了最大程度实现曾经代码的复用,我们最开始考虑使用可以支持C++的QT来进行相关的设计 ...

  5. 第四周作业&&结对编程

    1. 结对编程. 本周开始,和我结对编程的小伙伴是齐嘉亮(博客:http://www.cnblogs.com/zhengrui0452/). 因为这周需要发布四人团队项目的alpha版本,刚好我和亮哥 ...

  6. 结对编程的感想&收获

    关于结对编程的感想.感受,见我的另一篇随笔——<构建之法>结对编程   感想 下面我来谈谈本次结对编程的收获以及发现的问题 收获 ①这是我人生中第一次做UI界面设计,刚拿到这个题目还是比较 ...

  7. 安卓APP开发简单实例 结对编程心得

    开始说起搞APP开发,自己和小伙伴的编程水平真的很低,无从下手,只有在网上找点案列,学习着怎样开发,结对编程还是面临着许多问题的,大家的水平有所差异和编程风格不同,我们用eclipse做了一个仿微信登 ...

  8. 结对编程——四则运算器(UI第十组)

    博客目录: 一.问题描述                   二.设计思路                   三.UI开发过程                       四.对接过程       ...

  9. 结对编程项目复盘:带UI的小初高数学学习软件

    实现个人项目时,由于我当时的Java GUI编程基础还比较薄弱,所以我选择通过命令行实现,并将编程开发的重点放到了算法效率上去.没能设计出用户体验更佳的UI成为了我在个人项目阶段最大的遗憾. 在这次结 ...

随机推荐

  1. windows下查看端口占用以及关闭相应的进程

    开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...

  2. Codeforces Breaking Good

    Breaking Good time limit per test 2 seconds memory limit per test 256 megabytes Breaking Good is a n ...

  3. Codeforces 1178F DP

    题意:有一张白纸条,你需要给这张纸条染色.染色从颜色1开始染色,每次选择纸条的一段染色时,这一段的颜色必须是相同的.现在给你染色后的纸条,问有多少种染色方案? F1: 思路:最开始的想法是以染色顺序为 ...

  4. Vue2 实现时空穿梭框功能模块

    前言 这篇文章主要是分享一个时空穿梭框功能,也就是我们平时用的选择功能.勾选了的项就会进入到另一个框中. 时空穿梭框之旅 示例演示: 这个时空穿梭框实现了: 1.可以全选.反选 2.没有选中时,不可以 ...

  5. jquery 选项卡切换 带背景图片

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  6. sass-loader屡次安装不生效的问题

    报错信息: npm WARN sass-loader@8.0.0 requires a peer of webpack@^4.36.0 but none is installed. You must ...

  7. Linux eth0, eth1, ..., eth%d 的生成【转】

    转自:https://blog.csdn.net/xiruanliuwei/article/details/78765255 一直很好奇,Linux下的eth0, eth1,eth2等是如何生成的~ ...

  8. 【InnoDB】缓冲池

    索引目录 INNODB的体系结构 缓冲池 缓存中页的定位: checkpoint技术 INNODB的关键特性 插入缓冲 change buffer 两次写 以下的资料总结自:官方文档和<MySQ ...

  9. mysql inner join用法

    inner join(等值连接):只返回两个表中联结字段相等的行. left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录. right join(右联接):返回包括右表中的 ...

  10. python 网络编程:socket

    在学习socket之前,我们先复习下相关的网络知识. OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.OSI七层模型是由国际标准化组织ISO定义的网络的基本结构,不仅包括一 ...