今回は、「QListView」から派生させて作りたいと思いますが、基底クラスはお好みで変更してください。Dropが受け付けられるように各オプションを設定します。self.setAcceptDrops(True)self.setDragDropMode(QtGui.QAbstractItemView.InternalMove)MayaのD&Dの仕様を理解するここで、一度Maya内でD&Dした時の挙動を確認してみます。検証コードは以下の通りです。[u’application/x-maya-data’]「text/plain」はシンプルなテキスト情報で「QMimeData.text()」で簡単に取り出すことができます。続いては、D&Dできたアイテムを受け入れるかどうか処理する「dragEnterEvent」を実装していきます!「text/plain」は「QMimeData.hasText()」で、「application/x-maya-data」は「QMimeData.hasFormat(<format>)」で調べることができます。これらの情報を持っている時は受け入れて、それ以外は受け入れないようにします。続いては、受け入れたアイテムが実際のドロップした時の処理をする「dropEvent」を実装していきます。item)event.accept()「dragEnterEvent」の時と同様に、持っているフォーマットによって処理を分岐していきます。(1)「text/plain」の場合は、D&Dされたノード名を文字列で取得することができます。複数ある場合は、改行されながらノード名が羅列していくので、改行で文字列を分割してリストを作成します。ここでも、「application/x-maya-data」については一旦おいておくことにします(;・∀・)ノードのリストができたら、繰り返し処理をしながら、「QStandardItem」をモデルに登録していきます(2)。「application/x-maya-data」は初めてみたフォーマットなので、Google先生でいろいろ検索したのですがうまくデータを取り出す方法が見つけられませんでした。現状Mayaの中の人にしかわからないデータのようです。逃げ道を発見しました(゚∀゚)D&Dをする時、大半の人はノードを選択してからD&Dをしているように思えます。いうことは!!「cmds.ls」で選択を取得すれば、D&Dされたノードと一致するのでは!?っと考えました(強引)。1つだけであれば、ノードを選択しなくてもD&DできちゃうのがMayaちゃんです。D&Dされたのにノードの選択がない時は対処できますが、選択と違うノードがD&Dされた時は一致しない内容がリストにでてくる可能性があります。エンドユーザーからしたら、バグでしかないのでご注意いただければっと思います。この前提条件をもとに、実装したのが以下のコードになります。選択されたノードがない場合は、ダイアログを表示して注意喚起をする。́)ゞP.S「中の方、、、是非、application/x-maya-dataのパースの仕方を教えてください。コメントをキャンセルメールアドレスが公開されることはありません。Messengerを使ってメッセージを送る方法!!RECOMMENDこちらの記事も人気です。part1ABOUTこの記事をかいた人たっくんフリーランスのCG屋さん。