带有用户数据的 QStandardItem
QStandardItem with user data
在我的应用程序中,我有一个带有 QStandardItemModel 的 QListView。我需要这些项目来保存一些用户数据,通过扩展 QStandardItem 并添加我自己的数据可以正常工作。但我也希望可以通过拖动对列表中的项目进行重新排序,问题就在这里开始了。似乎 QT 在放下项目时克隆了它,复制了测试和颜色,但是它不知道我的用户数据。我尝试在 clone() 中解决它,但它仅使用项目原型(它是一个空项目)调用。我还尝试覆盖 setData() 函数并为我的用户数据使用角色 UserRole,但是在拖动时也没有复制。
有人有类似的工作示例吗?
您需要继承 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)
我终于有时间再次处理这个项目并找到了解决方案。我覆盖了 setData 以确保在设置用户数据时文本和正则表达式模式得到更新,只有在进行拖放移动时,才会克隆该项目而不为我的数据调用此函数。我想实现只是直接复制成员。所以我的解决方案是监听列表中的移动事件,然后更新新项目所需的所有内容。
在我的应用程序中,我有一个带有 QStandardItemModel 的 QListView。我需要这些项目来保存一些用户数据,通过扩展 QStandardItem 并添加我自己的数据可以正常工作。但我也希望可以通过拖动对列表中的项目进行重新排序,问题就在这里开始了。似乎 QT 在放下项目时克隆了它,复制了测试和颜色,但是它不知道我的用户数据。我尝试在 clone() 中解决它,但它仅使用项目原型(它是一个空项目)调用。我还尝试覆盖 setData() 函数并为我的用户数据使用角色 UserRole,但是在拖动时也没有复制。
有人有类似的工作示例吗?
您需要继承 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)
我终于有时间再次处理这个项目并找到了解决方案。我覆盖了 setData 以确保在设置用户数据时文本和正则表达式模式得到更新,只有在进行拖放移动时,才会克隆该项目而不为我的数据调用此函数。我想实现只是直接复制成员。所以我的解决方案是监听列表中的移动事件,然后更新新项目所需的所有内容。