QStandardItem包含用户​​数据

时间:2016-05-13 13:30:07

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

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

有没有人有类似事情的工作示例?

2 个答案:

答案 0 :(得分:0)

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

class MyItem(QStandardItem):

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

model.setItemPrototype(MyItem())

但我希望QStandardItem已经复制了userdata。你是如何设置用户数据的?通常它看起来像这样

class MyItem(QStandardItem):
    MyDataRole = Qt.UserRole + 1
    MyOtherRole = Qt.UserRole + 2

item.setData('a value', MyItem.MyDataRole)

答案 1 :(得分:0)

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