我想扩展dropEvent()(QListWidget),我应该完全重新实现它吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想扩展dropEvent()(QListWidget),我应该完全重新实现它吗?相关的知识,希望对你有一定的参考价值。

[我有一个QListWidget,我将它设置为接受放置,模式为DragDrop等,我可以在所有位置(当然在QListWidget内)移动QListWidgetItems。

我喜欢这种行为,我希望它保持原样,但我也希望我的QListWidget也接受来自QTreeWidget的删除。如果我尝试重新实现QListWidget的dropEvent(),那么我将失去默认行为。

是否有任何方法可以扩展当前行为,以便同时在listwidget项之间拖放以及从treewidget到listwidget拖放,或者我必须在我的dropEvent()重新实现中完全重写这两种行为?

非常感谢您的回答:)

答案

编号

子类QListWidget,重新实现

virtual void    QListWidget::dropEvent ( QDropEvent * event )

并明确呼叫

QListWidget::dropEvent(event);

只要您需要默认行为。

How to call a parent class function from derived class function?

另一答案

两种方法:

  1. 实现独立的event filter,并使其作用于QEvent::Drop。原始QListWidget上的Install it。返回false,以便随后调用原始的dropEvent()处理程序。

  2. 继承自QListWidget,重新实现dropEvent(evt),最后,调用QListWidget::dropEvent(evt);。您的原始行为将保留。

以上是关于我想扩展dropEvent()(QListWidget),我应该完全重新实现它吗?的主要内容,如果未能解决你的问题,请参考以下文章

qt 拖放dropEvent

QT窗口拖拽功能简单应用(处理dragEnterEvent和dropEvent事件,不同的事件有不同的信息,比如mimeData)

在PyQt5中的QTreeWidget和QListWidget之间拖动项目?

删除QComboBox上的项目?

使用 pyqt5 (SIGNAL) 拖放

使用 setDropAction 时,QTreeWidget 丢弃的项目被删除