激光机编码总结
1、拆分库/模块(减少编译时间,提高结构清晰度),注意要把通用的剥离出来;
2、高层模块不直接调用底层模块具体类,二是通过调用底层模块的抽象接口(比如主程序为高层模块,文本节点和路径为底层模块,底层模块抽象出一个接口出来,参考依赖倒置原则DIP);
3、版本号的问题(库是否要版本号,或者它与主程序是否共用同一版本号);
4、确保只有单向依赖,不能出现双向依赖;
5、深刻理解MVC结构;
Model : 数据存储
View : 视图显示
Control :行为控制
6、与android交互功能没有单独剥离出来,比如U盘插拔事件监听等,应该独立另外一个程序出来;
7、主程序代码太多,影响编译时间,应该分模块出来,以库形式加载,main所在工程尽量少代码;
8、尽量少继承自QObject,由于元对象机制所在,会生成多余的代码量;
9、设计的时候要考虑到大数据或大文件等极限值;
10、FormEditTreeView没做好,FormEditorItem该取消;
11、宗旨:提供接口和协议供外部调用;
12、框架思想借鉴操作系统(内核+系统调用+外壳+界面操作);
13、现状为没有框架体系,对它的修改具有破坏性,不牢固;
14、软件更新loader不能自更新,可以创建一个功能最简单的loader,再创建对应的子loader,父loader只负责更新和启动子loader;
15、自定义日志类,方便调试,可以保存在内存中,文件中等;
16、特性(高度可定制性)
- 开机画面更新;
- 软件logo;
- 界面主题配色;
- 升级便捷;
- 开机动画;
- 功能模块化;
- 多用户管理;
- 远程终端;
- 多国语言(输入法,关机重启界面等);
- 日志记录(可以多进程通信实现,主程异常后,日志程序能照常记录);
- 通讯控制(可修改内容,硬件参数,切换文档等),通讯调试;
- 多平台支持(windows、Android);
- 自动备份(考虑到标刻中,备份速度要快);
- 命令模式;
- 简易DIY桌面;
- 重码检测(序列号,数据库,VIN码等);
- 内部集成使用手册;
- 版本控制;
- 权限定制;
- 取各个标签中心作最短路径优化;
- 输入法特殊字符;
- 协议插件(串口,网口等可切换协议);
- 支持普通模式与性能模式切换(性能模式下主要优化大数据容易卡顿问题,比如对大图形填充后的缩放显示);
- 测试文档样例;
- (点阵、单线,双线)字符等宽;
- 支持关闭/更新后台,loader程序;
- IO切换文档;
- 通过委壳shell操作软件,可以编写自动化测试工具;
- 桌面版也支持U盘导入导出(方便桌面版与移动版的资源同步,避开在保存文档同时保存资源引起的效率问题。由于Qt5接收不到windows事件,可以写个windows工具完成,android系统下一样原理);
- 支持在文档导出界面可选关联资源,在导入界面默认关联资源(无需选择);
- 关于属性区与编辑内容刷新问题,2种流向,①属性区更改->编辑内容刷新->属性区刷新,②编辑内容改动->属性区刷新;
- 获取加密失败后,有个未知错误提示,使打标数据紊乱;
- 校正方法简单(如红光可以在显示中键盘或按钮移动它);
- 选中标签后弹出常用操作,比如填充,删除,对齐等;
- 路径支持连接,如0.03mm间距的直线可以连接上,用于解决线条不闭合问题;
- 多文档IO打标;
- 写入缓存文件的时候也要附加上版本号,以便更新版本后,缓存需要清空情况(比如dxf缓存);
- 关于死机一直重启问题,可以在软件运行一段时间后,发送给linux监听器确认正常运行,否则监听器在固定时间后启动loader更新器;
- 关于防止破解版更新固件,可以在固件里存放某个正版检测软件,每次更新固件前都解压该软件,然后运行检测,loader根据此检测结果来判断是否继续更新(另外也可以在导入导出部分也检测);
- 软件APK管理器;
- 文档旋转打标;
- 支持一键重置软件(用于客户使用不了情况下,需要重置验证,前提是默认设置下是可以打标的);
- 出货默认打开含公司logo的文档;
- 登录管理员需要每次输入密码,工程师可以设置记住密码;
- 将UI上的按钮动作交由Action类执行,Action获取调用其它对象接口来获取资源并执行,这样有利于在其他地方共用此动作;
- 框架底层的职责一般是提供获取资源的接口,框架上层一般是执行工作;
- 插件/模块按需加载/卸载(不占用资源);
17、app版本号,底层版本号,控制板版本号(作用:比如app更新了,底层可以不更新,方便固件打包)
18、程序自检功能(比如软件上查看底板IO口是否正常);
19、程序=框架+组件,框架=逻辑框架(项目相关)+软件框架(项目无关,比如redo/undo、插件管理等)
20、插件/模块配置文件或数据统一由userdata文件夹为根目录,好处是在app根目录下不会出现每个插件/模块的配置数据;
21、draworder控制不能redo/undo,控制混乱;
22、插件版本号问题,出现低版本打开高版本插件情况;
23、界面脚本(qml)独立成一个资源包,按主题加载,切换UI界面方便;