首页| 论坛| 消息

标题:QTreeView和QDom同步高效操作XML的方法
作者:iamhuskar
日期:2016-05-13 11:51
内容:

我使用了QDom加载XML文件。然后用QTreeView显示XML。
现在想在操作QTreeView的时候(比如编辑其中某一项),QDom对应的项也修改。现在的做法是修改QtreeView里面Item的时候通过item的text去QDom里面查找对应的Element然后再修改。这样是不是效率比较低。
能否让QTreeView对应的节点Item绑定对应的Node。选中这个item能迅速从item里面得到对应的Node然后操作呢?
除了QMap这种还有么有更好的方式呢


#1 [stlcours 05-13 16:21]
XML表现力很强,但是查询效率是很低的。建议使用Map,或者其它数据结构中转。在内存里记录所有变化情况,然后一次性重新生成XML
#2 回 stlcours 的帖子 [iamhuskar 05-16 08:14]
stlcours:XML表现力很强,但是查询效率是很低的。建议使用Map,或者其它数据结构中转。在内存里记录所有变化情况,然后一次性重新生成XML (2016-05-13 16:21) 
XML结构比较大的时候。也是TreeView重新刷新一遍UI吗?这样显示和扩展这个TREEVIEW也比较慢吧。
第二就是我还要操作这个树。并不是查询就够了。我还要插入删除。类似XML一样。中转也要重新实现。
看样子用MAP实现是最合适的
谢谢回复
#3 回 iamhuskar 的帖子 [stlcours 05-17 16:18]
iamhuskar:XML结构比较大的时候。也是TreeView重新刷新一遍UI吗?这样显示和扩展这个TREEVIEW也比较慢吧。
第二就是我还要操作这个树。并不是查询就够了。我还要插入删除。类似XML一样。中转也要重新实现。
看样子用MAP实现是最合适的
谢谢回复 (2016-05-16 08:14) 
我亲测,QTreeView,用语句生成20万个节点,然后显示出来,一共就1~2秒,或者2到3秒。你的XML难道也会有这么多节点吗?
#4 回 stlcours 的帖子 [iamhuskar 05-17 17:20]
stlcours:我亲测,QTreeView,用语句生成20万个节点,然后显示出来,一共就1~2秒,或者2到3秒。你的XML难道也会有这么多节点吗? (2016-05-17 16:18) 
数据没有这么多节点。
关键是我要操作这个树。同步跟新xml。
比如我在TreeView的某个节点item上右键。新建了一个节点,添加了一些数据,然后要把这个数据同步到XML文件里面。是不是要遍历这个xml的节点通过比较节点的数据信息找到我插入的位置,这个是非常消耗时间的。
如果我形成TreeView的时候 把每个节点的item 通过setdata绑定一个指针 这个指针指向QDomElement。我插入的时候就立刻通过这个item得到这个QDomElement指针。就直接操作了。不用比较或者匹配查询。

回复 发表
主题 版块