老妈每天对账条目多,排错时需要人工每条对照,而且手写账单有时字迹模糊,增加了不少工作难度。看见她每天查账、录入,都要工作到深夜,好像debug一样,实在是太辛苦了。有见及此,开发一个小软件,希望能帮上一点忙。
在win7下用Qt5.1开发。效果图
算是首次自己使用Qt做开发,水平确实不怎样,但是一步一脚印慢慢学习吧
主要涉及了qstring / qlistwidget / doublespinbox几个类。
一开始想着在自定义的类里面写个结构体,包含单价、数量、总价这些方面,再对这个结构体做个链表,这样就可以添加或者删除我的条目。但写了一半就发现,这些数据主要都是用于显示出来,不需要进行复杂运算和存储,其实可以直接从界面上set或者get来搞定。
不过对于Qt确实很陌生,api都很不熟悉,只能打开qassistance一个一个慢慢看,慢慢试,一开始真的超级慢(现在也快不了多少),写个qstring的arg或者todouble这些都看了挺久的。
在doublespinbox里面,为了让总价随着前两条的改变而自己变化,我用了它的valuechange信号,“单价”或者“数量”的内容变了,“总价”会跟随变化。
listwidget的使用上用了挺长时间,看网上的资料大多都创建一个qlistwidgetitem的对象,然后再根据这个对象去修改。然后我就想,如果我要添加这些对象,只能在“插入”按钮的槽函数里面去新建这些对象,但是槽函数结束就会导致这些对象消亡,如果用new的方法去新建,后面回收又会很麻烦。这里面比较纠结,也不知道有没有其他方法。后来查api的时候看到,currentRow可以返回鼠标选中的当前行号,item可以返回所在行对应的listWidgetItem地址,这样就不需要自己创建那个listwidgetitem的对象。
listwidget里面比较特殊的是删除条目的时候,不是用remove*之类的函数,而是用takeitem。
为了增加软件的人性化,每次输入完,要自己完成setfocus,setvalue,selectall这些动作,这些对于提高老妈的输入效率还是很有帮助的。