【问题标题】:How to drop items on QListWidget between some items?如何在某些项目之间放置 QListWidget 上的项目?
【发布时间】:2012-03-31 16:36:20
【问题描述】:

我有自己的类继承自 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 qt pyqt


    【解决方案1】:

    我找到了一些解决方法。有点脏但有效:

    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 来获取行号...

    【讨论】:

    • 我打算使用此处描述的解码 mimedata 的痛苦过程:wiki.python.org/moin/PyQt/… 但您的回答中的event.source() 让它变得更加简单。
    【解决方案2】:

    我不知道 python,但是在 C++ 中你可以使用 casts 来解决你的问题。 (伪 C++ 代码:)

    YourListWidget::dropEvent(QDropEvent * event) {
        YourListWidgetItemClass* item = qobject_cast<YourListWidgetItemClass* >(event->source()->currentItem());
    }
    

    【讨论】:

    • 我不确定它有什么帮助?我已经通过克隆它来创建我的类的对象(不是最好的主意,但有效)......但我仍然不能使用标准的 dropEvent 甚至在我的函数中调用 QListWidget.dropEvent(self,event) 。对我来说最好的帮助是查看原始 dropEvent 函数在 python 中的外观
    猜你喜欢
    • 2021-09-14
    • 2017-05-26
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多