Model/View

最近在做文字导航相关工作,发现一些问题:

业务:1.和播放业务关联比较大同时涉及播控流程2.数据源涉及不同分类3.媒资结构涉及相关业务及适配现有接口可提供数据

技术:支持大量数据动态加载

单从技术角度来说一下:

最初采用的QTreeWidget控件,现在考虑替换成QTreeView,主要原因有:1.数据量大存储信息随着需求越发复杂 2.增强扩展性,为二期需求满足数据库等形式加载数据性能 3.业务逻辑交互操作较复杂,为了实现数据和UI的分离。

首先说下最初的方案:

基础数据采用json存储基础业务分类信息,遍历json结构添加QTreeWidget节点,QtUserRole扩展Item存储对应json结构属性信息。一级分类节点由于要响应复杂的交互事件直接插入自定义widget,子节点为了保证加载速度使用QItemDelegate绘出item样式(否则也采用添加widget的方式会因为创建ui对象耗时出现卡顿的问题),响应交互事件加载异步调用OPENAPI接口获取分类数据,通过信号槽方式,通过在父节点下添加子节点动态加载新的节点数据。

替换方案:

梳理原有业务逻辑,采用Mode/View方式分离数据和UI,初始化加载数据及动态添加数据通过维护Mode实现,同时封装OPENAPI接口,独立所有负责展示和交互的View对象,View仅负责展示。

原文地址:https://www.cnblogs.com/zhuqn/p/5193116.html