Greetings,
I am trying to implement D&D. Dragging seems to work, but my code ain't "dropping" it.
Could someone "drag" their eyeballs over my code and maybe "drop" me some hints...
Ok, what I want to do is simple: I have 2 or more instances of "my_QIconView", populate them with some icons, and then I want to "D&D" icons between them.
Incidently, D&D inside the same my_QIconView works (don't ask me why:).
Just not between side-by-side my_QIconView instances.
In my opinion, the problem resides somewhere in "contentsDropEvent()", but then
I don't quite understand the C++ examples 'dragdrop' nor 'fileiconview'.
Couldn't find much on D&D in the list's archive either.
Cheers, Vio
--- start code segment ----------------------------------
class my_QIconView(QIconView):
"testing Drag&drop"
def __init__(self,dragSource = None,name = None): QIconView.__init__(self, dragSource, name)
self.setAcceptDrops(TRUE)
# DRAG ----------
def startDrag(self): "Drag-drop functionality" print self.parent().name(),'---startDrag---' d = self.dragObject() # get appropriate drag object print self.parent().name(),'d1>',d # d.drag(QIconDrag.DragCopyOrMove) - bad call: runtime error d.dragMove() # d.dragCopy() # calls dragEnterEvent,dragMoveEvent,dragLeaveEvent # when 'drag' cursor leaves widget's boundaries print self.parent().name(),'d2>',d
def dragEnterEvent(self, e): print self.parent().name(),'---dragEnterEvent---',e.format() print 'canDecode>',e.accept(QIconDrag.canDecode(e))
def dragMoveEvent(self, e): print self.parent().name(),'---dragMoveEvent---',e.pos() if e.source(): e.acceptAction()
def dragLeaveEvent(self, e): print self.parent().name(),'---dragLeaveEvent---',e
# DROP ---------------
def contentsDropEvent(self, e):
print self.parent().name(),'---contentsDropEvent---'
print self.parent().name(),e.encodedData(e.format())
print 'e>',e
print 'action>',e.action()
if e.action() == QDropEvent.Move:
print 'contentsDropEvent> MOVE'
elif e.action() == QDropEvent.Copy:
print 'contentsDropEvent> COPY'
""" BAD code following up: yes, how do I get at my icon from here?
icon = QPixmap() if QIconDrag.canDecode(e, icon): self.insertItemAt(icon, e.pos()) """ --- end code segment ----------------------------------
One of the traps of using dNd with QIconView/QListView is that you need to call self.viewPort().setAcceptDrops(True). Maybe that does it for you.
greetings
Torsten
--
Torsten Marek <[EMAIL PROTECTED]>
ID: A244C858 -- fingerprint 1902 0002 5DFC 856B F146 894C 7CC5 451E A244 C858
www.keyserver.net -- wwwkeys.eu.pgp.net
< information must flow >
pgp00000.pgp
Description: PGP signature
