首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qtreeview数据不一致

qtreeview数据不一致
EN

Stack Overflow用户
提问于 2011-10-04 17:07:26
回答 1查看 218关注 0票数 0

我在QTreeView示例中有一个基于editabletreemode.py的PyQt图形用户界面。在模型内部,我根据需要重新实现了setData():对于一些超出范围的值,我返回False,否则返回True

代码语言:javascript
复制
def setData(self, index, value, role=QtCore.Qt.EditRole):
    if role != QtCore.Qt.EditRole:
        return False

    item = self.getItem(index)
    result = item.setData(index.column(), value)

    if result:
        self.dataChanged.emit(index, index)
        self.modified = True

    print "setData() returning ", result
    return result

问题是,即使当setData返回False时,图形用户界面仍然接受更改后的值。所以我现在在模型和视图之间有不一致的数据。对我来说有意义的是,当setData()返回False以拒绝该值时,视图应该恢复为旧值。这个是可能的吗?

实际上解决了setData()的返回值似乎无关紧要。无论如何,QTreeView似乎调用data()来重新检索值。我遇到的问题是因为setData()更改了内部数据,即使它返回False。

如果有人能向我解释一下setData()的返回值是用来做什么的,那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-04 18:38:01

我能看到的唯一问题是.setData(index, value, role).setData()签名。您的代码片段和对问题的描述都不够冗长,不足以说明任何其他问题。

编辑:确实,在看了Qt源代码之后,我改正了。与我之前提到的编辑不同,视图实际上并没有使用.setData()的返回值。

数据由委托的.setModelData()提交给模型。通常,Qt使用QStyledItemDelegate,它的.setModelData()方法实际上忽略了.setData()的返回值。因此,视图实际上并不关心数据是否已成功设置。当视图中某个单元格的编辑器关闭时,视图仅显示该单元格的当前值(由.data()检索)。

但是,.setData()的返回值仍然很重要,行为良好的模型应该注意返回一个适当的值。模型通常抽象数据源,并且它们本身独立于视图。因此,也可以直接访问模型,在这种情况下,调用者需要检查.setData()的返回值,以了解操作是否成功。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7645555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档