Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PySide import QtCore, QtGui
- class MyItem(QtGui.QStandardItem):
- '''This is the item I'd like to drop into the view'''
- def __init__(self, parent=None):
- super(MyItem, self).__init__(parent)
- self.testAttr = 'hello'
- class ReceivingView(QtGui.QListView):
- '''Custom view to show the problem - i.e. the dropEvent produces a QStandardItem rather than MyItem'''
- def __init__(self, parent=None):
- super(ReceivingView, self).__init__(parent)
- def decode_data(self, bytearray):
- data = []
- item = {}
- ds = QtCore.QDataStream(bytearray)
- while not ds.atEnd():
- row = ds.readInt32()
- column = ds.readInt32()
- map_items = ds.readInt32()
- for i in range(map_items):
- key = ds.readInt32()
- value = MyItem()
- ds >> value
- #item[QtCore.Qt.ItemDataRole(key)] = value
- item = value
- data.append(item)
- return data
- def dropEvent(self, event):
- #print event.mimeData().formats()
- byteArray = event.mimeData().data('application/x-qabstractitemmodeldatalist')
- for item in self.decode_data(byteArray):
- copiedItem = MyItem(item)
- newItem = MyItem('hello')
- print copiedItem
- print newItem
- self.model().appendRow(copiedItem) # this does not work
- #self.model().appendRow(newItem) # this works
- event.accept()
- ## let the default behaviour do it's thing:
- #super(ReceivingView, self).dropEvent(event)
- ## now show received item is QStandardItem, not the sent custom item
- #item = self.model().item(self.model().rowCount() - 1)
- ##print item
- if __name__ == "__main__":
- import sys
- app = QtGui.QApplication(sys.argv)
- mw = QtGui.QMainWindow()
- w = QtGui.QSplitter()
- mw.setCentralWidget(w)
- # models
- model1 = QtGui.QStandardItemModel()
- model2 = QtGui.QStandardItemModel()
- for i in xrange(5):
- #item = QtGui.QStandardItem()
- item = MyItem()
- item.setData(str(i), QtCore.Qt.DisplayRole)
- model1.appendRow(item)
- # views
- view1 = QtGui.QListView()
- view2 = ReceivingView()
- for v in (view1, view2):
- v.setViewMode(QtGui.QListView.IconMode)
- view1.setModel(model1)
- view2.setModel(model2)
- w.addWidget(view1)
- w.addWidget(view2)
- mw.show()
- mw.raise_()
- sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement