0
私は単にオブジェクトのリストを表示するQListWidgetを使用しています。私は、ユーザーが内部ドラッグアンドドロップでこれらの項目を並べ替えることを許可します。すべて機能しますが、ユーザーが削除(並べ替え)しようとすると、チェックを追加する必要があります。チェックが失敗した場合は、元の注文をプログラムで再設定します。ここで私が持っているものです:それはアイテムを複製することがあるのでQListWidgetのドラッグ・ドロップ操作からプログラムで戻って戻す方法は?
class SequenceControl(QListWidget):
def __init__(self, parent = None):
super(SequenceControl, self).__init__(parent)
self.initialIndex = 0
self.selectedObject = None
self.setAcceptDrops(True)
self.setDragEnabled(True)
self.setDragDropMode(QAbstractItemView.InternalMove)
def dragEnterEvent(self, event):
super(SequenceControl, self).dragEnterEvent(event)
self.selectedObject = self.currentItem()
self.initialIndex = self.currentRow()
def dropEvent(self, event):
super(SequenceControl, self).dropEvent(event)
# Some logic here (not shown) to see if the drop is not
# allowed. Assume it isn't:
warningDialog = MyWarningDialog(self.parent)
ProceedAnyway = warningDialog.exec_()
if ProceedAnyway:
# Do stuff...
else:
# Here's the problem. I need to place the item being dropped
# back in its initial pre-drag/drop location. The following
# naïve attempt doesn't work:
self.insertItem(self.initialIndex, self.selectedObject)
上記は、(私は信じて)確かに間違っています。しかしそれとは別に、問題はそれが効果がないように見えるということです。私はドロップイベントが並べ替えの面で私がやっていることをオーバーライドしていると思います。しかし、それはただの理論です。誰でもこれを行う正しい方法を知っていますか?