正如在解释这个答案,你可以使用setItemPrototype提供项目工厂的典范。但是,正如答案中所述,在拖放操作期间仅传输某些类型的信息。对于a
QStandardItem,这意味着仅项目标志和项目数据。如果使用多个子类,则无法保留项目的特定子类。一个模型只能有一个原型,该原型用于Qt内部创建的所有项目。
这意味着
QStandardItem如果需要区分不同的项目类型,则不应使用多个子类。相反,您应该使用单个子类并重新实现QStandardItem.type来区分它们:
class MyItem(QtGui.QStandardItem): TypeItemA = QtGui.QStandardItem.UserType TypeItemB = QtGui.QStandardItem.UserType + 1 TypeItemC = QtGui.QStandardItem.UserType + 2 def clone(self): return MyItem() def type(self): return self.data(QtCore.Qt.UserRole + 1000) def setType(self, value): self.setData(QtCore.Qt.UserRole + 1000, value)...itemA = MyItem(self)itemA.setType(MyItem.TypeItemA)itemB = MyItem(self)itemB.setType(MyItem.TypeItemB)



