PyQt4 - Ziehen und Ablegen

8

Hey, ich habe dieses Tutorial durchgelesen, um die Methoden zum Ziehen und Ablegen in PyQt4 zu verstehen. Allerdings kann ich die folgenden Punkte nicht verstehen. Es wäre schön, wenn jemand es mir klarer machen könnte.

%Vor%

Warum gibt es eine separate self.button.move () und e.setDropAction () Verschiebt self.button.move () tatsächlich die Schaltfläche selbst? Und könnte jemand erklären, was drag.setHotSpot und drag.start () tun? Danke.

    
Manoj 18.01.2013, 09:23
quelle

2 Antworten

15

Dieses Tutorial ist ernsthaft veraltet. QDrag.start ist seit Qt 4.3 veraltet. QDrag.exec_ sollte stattdessen verwendet werden.

Wie Sie in den Dokumenten für exec sehen können, hat es einen Rückgabewert. setDropAction in dropEvent bestimmt diesen Wert. Es führt den Umzug nicht durch. Deshalb brauchen Sie ein self.button.move() , um das eigentliche Verschieben durchzuführen. Also, was ist der Sinn von setDropAction ? Sie müssen möglicherweise wissen, welche Art von Ziehen Sie ausgeführt haben. Stellen Sie sich vor, Sie implementieren Drag-Drop zwischen zwei Listen-Widgets. Wenn Sie eine Verschiebungsoperation ausgeführt haben, müssen Sie das Objekt aus dem Quellwidget entfernen und im Ziel erstellen. Wenn es sich um einen Kopiervorgang handelt, können Sie das Original belassen und nur eine Kopie im Ziel erstellen.

setHotSpot / hotSpot bezieht sich auf setPixmap von QDrag . Sie können ein QPixmap anzeigen, während Sie das Element ziehen. hotSpot bestimmt die Positionierung der Pixmap. Die Pixmap wird so positioniert, dass sich der Cursor relativ zur oberen linken Ecke der Pixmap in hotSpot befindet. Im Fall dieses Tutorials ist es ziemlich sinnlos, da kein Pixmap angezeigt wird.

Hier ist eine etwas modifizierte und aktualisierte Version dieses Tutorials. Hoffentlich habe ich genug Kommentare aufgenommen. Sie können verschieben mit Right-Click oder kopieren mit Shift + Right-Click :

%Vor%     
Avaris 19.01.2013, 03:45
quelle
1

Avaris 'Antwort wurde für PyQt5 und Python 3 angepasst.

%Vor%     
David Wallace 11.01.2018 09:21
quelle