2016-04-04 8 views
0

Ich habe eine Bibliothek mit Texturen Assets etc in einem QListWidget. Ich möchte Drag & Drop der Widgets in eine QApplication ermöglichen, in meinem Fall Maya. Wie verbinde ich das dropEvent mit Maya, damit maya registriert, dass etwas gelöscht wurde? Kann mir bitte jemand in die richtige Richtung zeigen.Drag & Drop QWidget in Maya

+0

Ich bin nicht sicher, Ihre Frage klar zu verstehen. Wo möchten Sie das Drop-Event aktivieren? Auf deinem QListWidget oder im Hauptfenster von Maya? Möchten Sie die Textur-Thumbnails aus Ihrem QListWidget ziehen und in das Maya-Viewport ziehen? – DrHaze

+0

Ja, ich habe ein Bibliotheksfenster mit vielen listWidgetItems (Thumbnails von HDRs etc etc). Ich möchte sie auf Mayas Fenster ziehen und ablegen, was dann einen Tropfen registrieren sollte. Und ich kann eine Funktion ausführen. Der Plan ist, zu fallen und IES Lichtprofil oder HDR-Licht Textur in Maya, die dann ein Licht mit richtigen Verbindungen usw. erzeugt – arvidurs

Antwort

0

Mit einigen ernsten Versuch und Irrtum fand ich eine Lösung, die eigentlich ziemlich geradlinig ist, da es meistens der Fall ist ... So ist die Hauptsache, das Ereignis mit der Haupt-App in meinem Fall maya zu registrieren.

main_win = mhelper.getQMayaMainWindow() 
main_win.installEventFilter(drop_filter) 

und dann im Ereignisfilter muss ich überprüfen, welches Ereignis aufgerufen wird:

def eventFilter(self, obj, event): 
     self.obj = obj  

     if event.type() is event.DragEnter: 
      self.mouse_button = QtGui.QApplication.mouseButtons() 
      event.accept() 

     if event.type() is event.Drop: 
      library_w = event.source() 
      if self.mouse_button == QtCore.Qt.LeftButton: 

     .... 
0

Ich glaube nicht, dass Sie richtig Ereignis auf Ihrem maya Hauptfenster fallen umgehen kann, aber eine Sache ist sicher, Sie können es bei jedem tun. In meinem Fall habe ich es in meinem qt Hauptfenster gemacht.

class Droper(QtGui.QMainWindow): 


    def __init__(self, parent=None): 

     super(Droper, self).__init__(parent) 

     self.setAcceptDrops(True) # Very important 



    def dragEnterEvent(self, event): 
     """ 
     The event called when the user drag elements over the drop place 
     """ 
     if event.mimeData().hasUrls: 
      event.accept() 
     else: 
      event.ignore() 
      print "We don't want this !" 


    def dropEvent(self, event): 
     """ 
     The event called when the user drops its elements 
     Only if dragEnterEvent accept the event 
     """ 
     for url in event.mimeData().urls(): 
      print url 

Sie müssen acceptDrops auf Ihrem Widget aktivieren, Sie können es direkt in seinen Eigenschaften in Qt Designer tun. Sie müssen auch Ereignisse definieren, die Sie verwenden möchten, gehen Sie zu, um die 4 Drag & Drop-Ereignisse zu sehen.

Ich hoffe, es hat Ihnen geholfen, fragen Sie, wenn Sie nicht verstehen, wie Sie es implementieren.