Как перетаскивать элементы в QListWidget между некоторыми элементами? - PullRequest
0 голосов
/ 15 марта 2012

У меня есть собственный класс, унаследованный от QListWidgetItem, и другой класс, унаследованный от QListWidget.Я пытаюсь заставить Drag and Drop работать правильно.Я хочу вставить элементы именно там, где находится индикатор.Я не могу использовать стандартный QListWidget.dropEvent, потому что тогда он пытается отбросить QListWidgetItems ... не объекты моего класса.Вот часть моего dropEvent, но это не очень хорошо:

def dropEvent(self, event):
    item=event.source().currentItem().clone()
    oldrow=event.source().row(event.source().currentItem())
    o=event.source().takeItem(oldrow)
    del(o)
    cursorpos=self.mapFromGlobal(QtGui.QCursor.pos())
    itembefore=self.itemAt(cursorpos)
    print itembefore
    if itembefore:
        row=self.row(itembefore)
        self.insertItem(row, item)


    else:
        self.addItem(item)

Теперь он всегда сбрасывает предметы После того, как предмет вы бросаете ... и не всегда, где отображается индикатор.Некоторые идеи?

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Я нашел обходной путь. Немного грязно, но работает:

def dropEvent(self, event):
    olditem=event.source().currentItem()
    currentrow=event.source().row(olditem)
    item=event.source().takeItem(currentrow)
    QtGui.QListWidget.dropEvent(self,event)
    newItem=self.findItems(olditem.text(),QtCore.Qt.MatchExactly)[0]
    row=self.row(newItem)
    o=self.takeItem(row)
    del(o)
    if event.source()!=self:
        self.insertItem(row,item)
        self.emit(QtCore.SIGNAL("moveTask"),item.itemid,self.date)
    else:
        del(olditem)
        self.insertItem(row,item)  
    event.accept()       
    self.emit(QtCore.SIGNAL("sortTasks"),self)

Я использую стандартный dropEvent только для получения номера строки ...

0 голосов
/ 15 марта 2012

Я не знаю Python, но в C ++ вы можете использовать casts для решения вашей проблемы.(Псевдо-C ++ код:)

YourListWidget::dropEvent(QDropEvent * event) {
    YourListWidgetItemClass* item = qobject_cast<YourListWidgetItemClass* >(event->source()->currentItem());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...