• 5253阅读
  • 4回复

[提问]QTreeView和QDom同步高效操作XML的方法 [复制链接]

上一主题 下一主题
离线iamhuskar
 

只看楼主 倒序阅读 楼主  发表于: 2016-05-13


我使用了QDom加载XML文件。然后用QTreeView显示XML。
现在想在操作QTreeView的时候(比如编辑其中某一项),QDom对应的项也修改。现在的做法是修改QtreeView里面Item的时候通过item的text去QDom里面查找对应的Element然后再修改。这样是不是效率比较低。

能否让QTreeView对应的节点Item绑定对应的Node。选中这个item能迅速从item里面得到对应的Node然后操作呢?

除了QMap这种还有么有更好的方式呢
离线stlcours

只看该作者 1楼 发表于: 2016-05-13
XML表现力很强,但是查询效率是很低的。建议使用Map,或者其它数据结构中转。在内存里记录所有变化情况,然后一次性重新生成XML
离线iamhuskar

只看该作者 2楼 发表于: 2016-05-16
回 stlcours 的帖子
stlcours:XML表现力很强,但是查询效率是很低的。建议使用Map,或者其它数据结构中转。在内存里记录所有变化情况,然后一次性重新生成XML (2016-05-13 16:21) 

XML结构比较大的时候。也是TreeView重新刷新一遍UI吗?这样显示和扩展这个TREEVIEW也比较慢吧。
第二就是我还要操作这个树。并不是查询就够了。我还要插入删除。类似XML一样。中转也要重新实现。
看样子用MAP实现是最合适的
谢谢回复
离线stlcours

只看该作者 3楼 发表于: 2016-05-17
回 iamhuskar 的帖子
iamhuskar:XML结构比较大的时候。也是TreeView重新刷新一遍UI吗?这样显示和扩展这个TREEVIEW也比较慢吧。
第二就是我还要操作这个树。并不是查询就够了。我还要插入删除。类似XML一样。中转也要重新实现。
看样子用MAP实现是最合适的
谢谢回复 (2016-05-16 08:14) 

我亲测,QTreeView,用语句生成20万个节点,然后显示出来,一共就1~2秒,或者2到3秒。你的XML难道也会有这么多节点吗?
离线iamhuskar

只看该作者 4楼 发表于: 2016-05-17
回 stlcours 的帖子
stlcours:我亲测,QTreeView,用语句生成20万个节点,然后显示出来,一共就1~2秒,或者2到3秒。你的XML难道也会有这么多节点吗? (2016-05-17 16:18) 

数据没有这么多节点。
关键是我要操作这个树。同步跟新xml。

比如我在TreeView的某个节点item上右键。新建了一个节点,添加了一些数据,然后要把这个数据同步到XML文件里面。是不是要遍历这个xml的节点通过比较节点的数据信息找到我插入的位置,这个是非常消耗时间的。

如果我形成TreeView的时候 把每个节点的item 通过setdata绑定一个指针 这个指针指向QDomElement。我插入的时候就立刻通过这个item得到这个QDomElement指针。就直接操作了。不用比较或者匹配查询。
快速回复
限100 字节
 
上一个 下一个