Мне просто пришлось иметь дело с этим, и это задница, но вот что нужно сделать:
Вы должны установить eventFilter
на свой подкласс ListWidget
, а затем наблюдать за событием ChildRemoved
. Это событие охватывает перемещения, а также удаление, поэтому оно должно работать для переупорядочения элементов с помощью перетаскивания внутри списка.
Я пишу свой Qt на C ++, но вот версия Pythonification:
class MyList(QtGui.QListWidget):
def __init__(self):
QtGui.QListWidget.__init__(self)
self.setDragDropMode(self.InternalMove)
self.installEventFilter(self)
def eventFilter(self, sender, event):
if (event.type() == QEvent.ChildRemoved):
self.on_order_changed()
return False # don't actually interrupt anything
def on_order_changed(self):
# do magic things with our new-found knowledge
Если у вас есть какой-то другой класс, содержащий этот список, вы можете переместить туда метод фильтра событий. Надеюсь, это поможет, я знаю, что мне пришлось бороться с этим в течение дня, прежде чем понять это.