繁体   English   中英

如何在某些项目之间的QListWidget上放置项目?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM