Seite 1 von 1

PYQT5 - Files mittels Drag and Drop aus QtableView - Tabelle in QT-fremde Anwendung ziehen

Verfasst: Donnerstag 10. Oktober 2024, 10:12
von Martin1986
Hallo alle zusammen,
ich habe wieder mal ein QT-Problem. Ich habe ein Fenster mit einer QtableView-Tabelle, welche XML-Pfade hält. Mittels Drag and Drop kann ich die Pfade in andere QT-Fenster ziehen. Ist das Zielfenster (in meinem Fall "notepad++") jedoch keine QT-Anwendung versagt die Funktion. Ich bekomme im notepad++ das Verbotszeichen angezeigt, dass ich hier nicht "droppen" kann. Die XML-Files sollen logischerweise im notepad++ dann automatisch geöffnet werden. Ist das überhaupt möglich, wenn ja, wo liegt mein Fehler?
Der Quelltext sieht folgendermaßen aus:

Code: Alles auswählen

    def mouseMoveEvent(self, e: QtGui.QMouseEvent) -> None:
        """
        Pfade der selektierten XML-Files aus tableView in andere Widgets ziehen
        """
        if e.buttons() == QtCore.Qt.LeftButton:
            files = self.getXmlsFrom_tableView()  # Pfade der selektierten XMLs aus tableView holen

            mimedata = QtCore.QMimeData()
            # Pfade als String nach QURL umwandeln und zu mimedata hinzufuegen
            mimedata.setUrls([QtCore.QUrl.fromLocalFile(f) for f in files])  

            drag = QtGui.QDrag(self)
            drag.setMimeData(mimedata)  # Pfade dem Dragobjekt hinzufuegen
            drag.setPixmap(self.pixmap)  # Bildchen am Mauszeiger hinzufuegen
            drag.exec_()  # Dragvorgang starten
PS: Drag and Drop in den Windows Explorer funktioniert!

Vielen dank für eure Hilfe schon im Vorraus.
Martin

Re: PYQT5 - Files mittels Drag and Drop aus QtableView - Tabelle in QT-fremde Anwendung ziehen

Verfasst: Donnerstag 10. Oktober 2024, 14:48
von Martin1986
Ich habe die Lösung gefunden!

Code: Alles auswählen

    def mouseMoveEvent(self, e: QtGui.QMouseEvent) -> None:
        """
        Pfade der selektierten XML-Files aus tableView in andere Widgets ziehen
        """
        if e.buttons() == QtCore.Qt.LeftButton:
            files = self.getXmlsFrom_tableView()  # Pfade der selektierten XMLs aus tableView holen

            mimedata = QtCore.QMimeData()
            # Pfade als String nach QURL umwandeln und mimedata hinzufuegen
            mimedata.setUrls([QtCore.QUrl.fromLocalFile(f) for f in files])  # Pfade als String nach QURL umwandeln

            drag = QtGui.QDrag(self)
            drag.setMimeData(mimedata)  # Pfade dem Dragobjekt hinzufuegen
            drag.setPixmap(self.pixmap)  # Bildchen am Mauszeiger hinzufuegen
            drag.exec_(QtCore.Qt.CopyAction)  # Dragvorgang starten
Beim Starten des Dragvorgangs muss man noch ein Flag mitgeben, welches anzeigt, dass die Files kopiert werden sollen --> drag.exec_(QtCore.Qt.CopyAction).
QtCore.Qt.CopyAction
ist die Lösung.