2016-04-04 26 views
0

QListWidget'ta doku varlıkları vb. Içeren bir kitaplığım var. Benim durumumda, widget'ların sürükle ve bırak özelliğini bir QApplication'a etkinleştirmek istiyorum. dropEvent öğesini Maya ile nasıl bağlarım yani maya bir şeylerin düştüğünü kaydeder? Birisi bana doğru yönde işaret edebilir mi lütfen.QWidget'i Maya'ya sürükleyip bırakın

+0

Sorunuzu açıkça anladığınızdan emin değilim. Bırak etkinliğini nerede etkinleştirmek istiyorsunuz? QListWidget'inizde veya Maya'nın ana penceresinde mi? Doku minik resimlerini QListWidget'inizden sürükleyip Maya'nın manzarasında bırakmak ister misiniz? – DrHaze

+0

Evet, çok sayıda listWidgetItems (hdrs vb. Küçük resimler vb.) Içeren bir kütüphane pencerem var. Maya penceresine sürükleyip bırakmak istiyorum; Ve bir fonksiyon çalıştırabilirim. Plan düşmeye ve IES ışık profiline ya da HDR ışık dokusuna maya haline getirilir ve bu da uygun bağlantılar vb. Ile ışık oluşturur. – arvidurs

cevap

0

Bazı ciddi deneme ve hata ile aslında oldukça düz olan bir çözüm buldum, çünkü çoğunlukla bu durumda ... Yani asıl mesele, olayımı ana uygulamamla maya olarak kaydetmektir.

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

Ben doğru bir şekilde maya ana penceresinde olay damla işleyebilir sanmıyorum, ama bir şey:

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

ardından olay filtresinde ben çağrıldığını hangi olay kontrol etmeliyiz emin, her QtWidget üzerinde yapabilirsiniz. Benim durumumda, qt ana penceremde yaptım.

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 

Widget'ınızda acceptDrop'leri etkinleştirmeniz gerekiyorsa, bunu doğrudan Qt Designer'daki özelliklerinde yapabilirsiniz. Ayrıca, kullanmak istediğiniz olayları tanımlamanız gerekir, 4 sürükle ve bırak olayını görmek için QWidget.dragEnterEvent'a gidin.

Bunu nasıl yapacağınızı anlamıyorsanız, yardımcı olmanızı umarız.

İlgili konular