【问题标题】:QStandardItem with user data带有用户数据的 QStandardItem
【发布时间】:2016-05-13 13:30:07
【问题描述】:

在我的应用程序中,我有一个带有 QStandardItemModel 的 QListView。我需要这些项目来保存一些用户数据,通过扩展 QStandardItem 并添加我自己的数据可以正常工作。但我也希望可以通过拖动重新排序列表中的项目,问题就从这里开始了。似乎QT在丢弃它时克隆了它,复制了测试和颜色,但是它不知道我的用户数据。我尝试在 clone() 中解决它,但它只用项目原型(这是一个空项目)调用。我还尝试覆盖 setData() 函数并将角色 UserRole 用于我的用户数据,但拖动时也不会复制。

有人有类似的工作示例吗?

【问题讨论】:

    标签: qt drag-and-drop pyqt4 user-data qstandarditem


    【解决方案1】:

    您需要继承QStandardItem 并覆盖clone 方法。您还应该为模型设置项目原型

    class MyItem(QStandardItem):
    
        def clone(self):
            obj = super(MyItem, self).clone()
            ... # copy user data as well
            return obj
    
    model.setItemPrototype(MyItem())
    

    但我希望QStandardItem 已经复制了用户数据。您如何设置用户数据?一般是这样的

    class MyItem(QStandardItem):
        MyDataRole = Qt.UserRole + 1
        MyOtherRole = Qt.UserRole + 2
    
    item.setData('a value', MyItem.MyDataRole)
    

    【讨论】:

      【解决方案2】:

      我终于有时间再次处理这个项目并找到了解决方案。我重写了 setData 以确保在设置用户数据时更新文本和正则表达式模式,只是在进行拖放移动时,项目被克隆而不为我的数据调用此函数。我猜这个实现只是直接复制成员。所以我的解决方案是监听列表中的移动事件,然后更新新项目所需的所有内容。

      【讨论】:

        猜你喜欢
        • 2017-06-30
        • 1970-01-01
        • 2011-03-09
        • 2022-01-11
        • 2019-06-25
        • 1970-01-01
        • 2012-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多