2016-04-04 9 views
0

QListWidgetにテクスチャアセットなどのライブラリがあります。私は、私の場合、MayaのQApplicationにウィジェットのドラッグアンドドロップを有効にしたいと考えています。 dropEventをMayaに接続すると、mayaは何かが削除されたことを登録しますか? 誰かが私を正しい方向に向けることができますか?QWidgetをMayaにドラッグ&ドロップする

+0

私はあなたの質問をはっきりと理解できません。どこでドロップイベントをアクティブにしますか?あなたのQListWidgetまたはMayaのメインウィンドウで? QListWidgetからテクスチャサムネイルをドラッグしてMayaのビューポートにドロップしますか? – DrHaze

+0

はい、私は多くのlistWidgetItems(hdrsなどのサムネイルなど)を持つライブラリウィンドウを持っています。 mayasウィンドウにドラッグアンドドロップすると、ドロップが登録されます。そして、私は機能を実行することができます。 IESのライトプロファイル、HDRライトテクスチャをマヤに落として、適切な接続などで光を生成するという計画です。 – arvidurs

答えて

0

いくつかの深刻な試行錯誤で、私は実際にはかなり正直な解決策を見つけました。そのほとんどがケースです。 主なものは、私のケースのメインアプリでイベントを登録することです。

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

し、私が呼び出されているイベントをチェックする必要があるイベントフィルタに:

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

私はあなたが正しくあなたのMayaのメインウィンドウのイベントをドロップ扱うことができると思いますが、一つのことはありません確信している、あなたはすべてQtWidgetでそれを行うことができます。私の場合は、メインウィンドウでqtを実行しました。

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 

あなたのウィジェットでacceptDropsを有効にする必要があります。あなたは直接Qt Designerのプロパティでそれを行うことができます。また、使用するイベントを定義する必要があります。QWidget.dragEnterEventを参照すると、4つのドラッグアンドドロップイベントが表示されます。

あなたのお手伝いをしたいと思っていますが、その実装方法がわからない場合は質問してください。

関連する問題