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

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Martin1986
User
Beiträge: 13
Registriert: Freitag 4. September 2020, 10:13

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
Martin1986
User
Beiträge: 13
Registriert: Freitag 4. September 2020, 10:13

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.
Antworten