我有自己的类继承自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)
现在它总是丢弃物品在你放下的物品之后...并且它并不总是显示指示器的位置。一些想法?
答案 0 :(得分:0)
我不知道python但是在C ++中你可以使用强制转换来解决你的问题。 (伪C ++代码:)
YourListWidget::dropEvent(QDropEvent * event) {
YourListWidgetItemClass* item = qobject_cast<YourListWidgetItemClass* >(event->source()->currentItem());
}
答案 1 :(得分:0)
我找到了一些解决方法。有点脏,但有效:
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获取行号...