Advertisement
Guest User

Untitled

a guest
Sep 19th, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.63 KB | None | 0 0
  1. from PySide import QtCore, QtGui
  2.  
  3. class MyItem(QtGui.QStandardItem):
  4.     '''This is the item I'd like to drop into the view'''
  5.    
  6.     def __init__(self, parent=None):
  7.         super(MyItem, self).__init__(parent)
  8.         self.testAttr = 'hello'
  9.  
  10. class ReceivingView(QtGui.QListView):
  11.     '''Custom view to show the problem - i.e. the dropEvent produces a QStandardItem rather than MyItem'''
  12.    
  13.     def __init__(self, parent=None):
  14.         super(ReceivingView, self).__init__(parent)
  15.        
  16.     def decode_data(self, bytearray):
  17.      
  18.         data = []
  19.         item = {}
  20.          
  21.         ds = QtCore.QDataStream(bytearray)
  22.         while not ds.atEnd():
  23.          
  24.             row = ds.readInt32()
  25.             column = ds.readInt32()
  26.              
  27.             map_items = ds.readInt32()
  28.             for i in range(map_items):
  29.              
  30.                 key = ds.readInt32()
  31.                  
  32.                 value = MyItem()
  33.                 ds >> value
  34.                 #item[QtCore.Qt.ItemDataRole(key)] = value
  35.                 item = value
  36.  
  37.             data.append(item)
  38.  
  39.         return data
  40.  
  41.     def dropEvent(self, event):
  42.  
  43.         #print event.mimeData().formats()
  44.  
  45.         byteArray = event.mimeData().data('application/x-qabstractitemmodeldatalist')
  46.         for item in self.decode_data(byteArray):
  47.             copiedItem = MyItem(item)
  48.             newItem = MyItem('hello')
  49.             print copiedItem
  50.             print newItem
  51.             self.model().appendRow(copiedItem) # this does not work
  52.             #self.model().appendRow(newItem) # this works
  53.  
  54.         event.accept()
  55.  
  56.         ## let the default behaviour do it's thing:
  57.         #super(ReceivingView, self).dropEvent(event)
  58.         ## now show received item is QStandardItem, not the sent custom item
  59.         #item = self.model().item(self.model().rowCount() - 1)
  60.         ##print item
  61.  
  62. if __name__ == "__main__":
  63.     import sys
  64.  
  65.     app = QtGui.QApplication(sys.argv)
  66.  
  67.     mw = QtGui.QMainWindow()
  68.     w = QtGui.QSplitter()
  69.     mw.setCentralWidget(w)
  70.  
  71.     # models
  72.     model1 = QtGui.QStandardItemModel()
  73.     model2 = QtGui.QStandardItemModel()
  74.  
  75.     for i in xrange(5):
  76.         #item = QtGui.QStandardItem()
  77.         item = MyItem()
  78.         item.setData(str(i), QtCore.Qt.DisplayRole)
  79.         model1.appendRow(item)
  80.  
  81.     # views
  82.     view1 = QtGui.QListView()
  83.     view2 = ReceivingView()
  84.     for v in (view1, view2):
  85.         v.setViewMode(QtGui.QListView.IconMode)
  86.    
  87.     view1.setModel(model1)
  88.     view2.setModel(model2)
  89.  
  90.     w.addWidget(view1)
  91.     w.addWidget(view2)
  92.  
  93.     mw.show()
  94.     mw.raise_()
  95.     sys.exit(app.exec_())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement