Qt:QAbstractItemModel中的setData方法

伊利斯·费基欧

我是模型视图的新手,我在阅读本教程的同时检查了文档,却偶然发现了这个小细节:可以在此处下载的教程代码位于QAbstractItemModel类(此处为QAbstractListModel)中, setData方法的代码是:

def setData(self, index, value, role = QtCore.Qt.EditRole):
    if role == QtCore.Qt.EditRole:

        row = index.row()
        color = QtGui.QColor(value)

        if color.isValid():
            self.__colors[row] = color
            self.dataChanged.emit(index, index)
            return True
    return False

根据教程中的解释以及从文档中了解的内容,如果函数返回True,则视图将更新,如果返回false,则什么也不会发生,但是当我将代码更改为:

def setData(self, index, value, role = QtCore.Qt.EditRole):
    if role == QtCore.Qt.EditRole:

        row = index.row()
        color = QtGui.QColor(value)

        if color.isValid():
            self.__colors[row] = color
            self.dataChanged.emit(index, index)
            return False # This is what I changed in the code
    return False

我意识到即使color.isValid()函数返回False,视图仍然会更新。我是不是误解了setData方法中的return角色,还是一个错误?

作为参考,我使用的是PySide 1.2.1,而不是PyQt4。

ekhumoro

引用视频教程中有关以下内容的信息setData

...如果操作成功,此函数需要返回true,否则视图将不会更新。

严格来说,这个说法是错误的。QAbstractItemModel的文档只说setData如果数据设置成功,则返回true,否则返回false;否则返回false。它没有提及这样做的后果。具体来说,它没有提及有关更新视图的任何内容。

查看Qt源代码,setData 确实在几个地方检查了返回值,其中一些检查有时可以帮助触发更新。但是实际上有很多事情可以触发更新,因此,返回值setData对于更新项目并不是必不可少的。

setData 应该返回true可能更准确,否则(在某些情况下)视图可能不会更新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Qt:QAbstractItemModel中的setData方法

来自分类Dev

Qt:如何在QAbstractItemModel中的子表上设置标题?

来自分类Dev

Qt:实现QAbstractItemModel的跨度

来自分类Dev

QGraphicsView中的QAbstractItemModel

来自分类Dev

Qt-替换QAbstractItemModel中的一行(绑定到QTableView)

来自分类Dev

QAbstractItemModel index()和parent()方法

来自分类Dev

在QSharedPointers中管理QAbstractItemModel数据

来自分类Dev

了解Qt视图模型体系结构:何时创建以及如何在QAbstractItemModel实现中清理索引?

来自分类Dev

为什么QAbstractItemModel :: setData破坏显示的文本和获取的data()值?

来自分类Dev

在HighCharts中多次使用setData

来自分类Dev

Qt QAbstractItemModel函数data()以未定义的角色调用

来自分类Dev

具有QSortFilterProxyModel的QAbstractItemModel中的InsertRows

来自分类Dev

qabstractitemmodel数据在qml中未更改

来自分类Dev

CKeditor setData()方法忽略图像

来自分类Dev

无法在Qt中调用静态方法

来自分类Dev

在Qt中显示图像的正确方法

来自分类Dev

在Qt中从C ++调用Java方法

来自分类Dev

Qt Qml 错误:无法在 Qml TreeView 的子类 QAbstractItemModel 中将 [未定义] 分配给 QString

来自分类Dev

为什么setData中的对象不是数据中的数组?

来自分类Dev

QStandardItemModel的setData,setItemData和setIem方法有什么区别?

来自分类Dev

使用 setData 方法时如何使数据持久化

来自分类Dev

CKEditor的SetData在版本4中不起作用-

来自分类Dev

当我们使用带有多个 setData 的 setData 方法时,Magento 1.x 日期字段不会更新

来自分类Dev

使用Qt在C ++程序中运行方法,而无需在Qt中编写整个程序

来自分类Dev

QAbstractItemModel foreach带有函子的迭代器:有没有更好的方法呢?

来自分类Dev

现在已弃用setRolesNames()方法,将角色名称分配给QAbstractItemModel

来自分类Dev

Qt中的插槽和方法之间有什么区别?

来自分类Dev

在Qt中播放通知(频率x)声音-最简单的方法?

来自分类Dev

在Qt Quick(QML)中实现缩放的正确方法

Related 相关文章

  1. 1

    Qt:QAbstractItemModel中的setData方法

  2. 2

    Qt:如何在QAbstractItemModel中的子表上设置标题?

  3. 3

    Qt:实现QAbstractItemModel的跨度

  4. 4

    QGraphicsView中的QAbstractItemModel

  5. 5

    Qt-替换QAbstractItemModel中的一行(绑定到QTableView)

  6. 6

    QAbstractItemModel index()和parent()方法

  7. 7

    在QSharedPointers中管理QAbstractItemModel数据

  8. 8

    了解Qt视图模型体系结构:何时创建以及如何在QAbstractItemModel实现中清理索引?

  9. 9

    为什么QAbstractItemModel :: setData破坏显示的文本和获取的data()值?

  10. 10

    在HighCharts中多次使用setData

  11. 11

    Qt QAbstractItemModel函数data()以未定义的角色调用

  12. 12

    具有QSortFilterProxyModel的QAbstractItemModel中的InsertRows

  13. 13

    qabstractitemmodel数据在qml中未更改

  14. 14

    CKeditor setData()方法忽略图像

  15. 15

    无法在Qt中调用静态方法

  16. 16

    在Qt中显示图像的正确方法

  17. 17

    在Qt中从C ++调用Java方法

  18. 18

    Qt Qml 错误:无法在 Qml TreeView 的子类 QAbstractItemModel 中将 [未定义] 分配给 QString

  19. 19

    为什么setData中的对象不是数据中的数组?

  20. 20

    QStandardItemModel的setData,setItemData和setIem方法有什么区别?

  21. 21

    使用 setData 方法时如何使数据持久化

  22. 22

    CKEditor的SetData在版本4中不起作用-

  23. 23

    当我们使用带有多个 setData 的 setData 方法时,Magento 1.x 日期字段不会更新

  24. 24

    使用Qt在C ++程序中运行方法,而无需在Qt中编写整个程序

  25. 25

    QAbstractItemModel foreach带有函子的迭代器:有没有更好的方法呢?

  26. 26

    现在已弃用setRolesNames()方法,将角色名称分配给QAbstractItemModel

  27. 27

    Qt中的插槽和方法之间有什么区别?

  28. 28

    在Qt中播放通知(频率x)声音-最简单的方法?

  29. 29

    在Qt Quick(QML)中实现缩放的正确方法

热门标签

归档