[英]How to drop items on QListWidget between some items?
我有一个自己的类,它是从QListWidgetItem继承的,另一个是从QListWidget继承的。 我正在尝试使拖放正常工作。 我想将指示器恰好插入位置。 我不能使用标准的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)
现在,它始终会掉落物品。放下物品后……并不一定总是在指示器显示的地方。 有什么想法吗?
我不了解python,但在C ++中,您可以使用强制转换来解决您的问题。 (伪C ++代码:)
YourListWidget::dropEvent(QDropEvent * event) {
YourListWidgetItemClass* item = qobject_cast<YourListWidgetItemClass* >(event->source()->currentItem());
}
我找到了一些解决方法。 有点脏但是可以用:
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仅获取行号...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.