最近在使用QML 过程中需要由C++ 的逻辑层上传数据给QML 展示,并且这个数据是不断更新的,所以我使用C++ 的mode 方式,然后在QML 中调用。当然这个方式肯定是没有问题的。闲暇之余,想了下,如果我不采用C++的方式实现 mode, 而是采用QML 中已有的 ListModel 怎么实现呢?大概分为二种,一种为需要不听刷新的界面,一种为从逻辑层获取数据后,不需要再刷新。
首先第一种,从逻辑层获取数据后,不需要再刷新,这个比较简单,就是在ListModel 中,先获取数据,然后通过这些数据创建相应的 ListElement. 然后这个就实现了。
第二种,需要动态刷新这个 相对来讲比较麻烦一点,首先在逻辑层需要时刻侦测数据,当数据发生变化的时候,我们就给QML发送一个消息,当QML收到消息的时候,对消息进行处理,比如,我删除了原来的某个元素,那么QML进行相应的删除操作,如果我添加了某个元素,那么我在QML层添加某个元素,如果修改了某个元素,我在QML修改某个元素。
第二种方法是我自己试验出来的,我当时也查了一些资料,没有相关的一个写法,一般都只采用C++ Modle 的方式。如果有更好的方式,可以留言,我学习下。