PyQT: Drag&Drap + Doppelklick Aktion

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PyQT: Drag&Drap + Doppelklick Aktion

    Hallo QT Fans,
    ich habe absichtlich eine Spur im C++ Forum gelassen, weil sich da naturgemäß mehr QT Entwickler rumtreiben und das Problem bestimmt keine Python Eigenheit ist.

    Zu dem Problem: Ich bin gerade dabei mit Python und QT 3 einen Mailclient zu programmieren. Man soll die Mails mit Doppelklick öffnen oder mit einem Drag verschieben können.

    Habe hier mal ein einfaches Beispiel erstellt:

    Quellcode

    1. from sys import argv
    2. from qt import *
    3. class DragDrop(QListView):
    4. def __init__(self, *args):
    5. QListView.__init__(self, *args)
    6. buttons = ["Drop Here1", "Drop Here2", "Drop Here3"]
    7. self.setAcceptDrops(1)
    8. self.setRootIsDecorated(True)
    9. self.addColumn("Column")
    10. for e in buttons:
    11. tmp = QListViewItem(self, e)
    12. QObject.connect(self, SIGNAL('pressed(QListViewItem *)'), self.startDrag)
    13. QObject.connect(self, SIGNAL('doubleClicked(QListViewItem *)'), self.double)
    14. def double(self):
    15. print "doppelklick"
    16. pass
    17. def dragEnterEvent(self, event):
    18. event.accept(QTextDrag.canDecode(event))
    19. def dropEvent(self, event):
    20. t=QString()
    21. QTextDrag.decode(event, t)
    22. pos = QPoint(event.pos().x(), event.pos().y() - self.header().height())
    23. item = self.itemAt(pos)
    24. if item is None:
    25. item = self
    26. child = QListViewItem(item, t)
    27. def startDrag(self, lvi):
    28. if lvi is not None:
    29. d = QTextDrag(lvi.text(0), self)
    30. d.dragCopy()
    31. if __name__ == '__main__':
    32. a = QApplication(argv)
    33. dragDrop = DragDrop()
    34. a.setMainWidget(dragDrop)
    35. dragDrop.setMinimumWidth(200)
    36. dragDrop.show()
    37. a.exec_loop()
    Alles anzeigen


    Wenn ihr das mal laufen lasst, merkt ihr, dass der Doppelklick nur noch sehr schwierig auszulösen ist (weil bei minimalser Beweung die DragOperation startet)

    Habt ihr eine Idee wie ich das lösen kann? Python liefert doch sonst alles mit ;)