如何接受QGraphicsScene和QGraphicsItem丢弃事件

How to accept both QGraphicsScene and QGraphicsItem drop event

本文关键字:事件 QGraphicsItem 何接受 QGraphicsScene      更新时间:2023-10-16

我正在做一个项目,我正在使用QGraphicsScene使用QGraphicsItem显示一些多媒体对象,如图像和文本。我有一个Widget,可以从中将一些文件从用户计算机拖放到Scene,从而触发创建新的QGraphicsItem。

好吧,现在我要做的是……当我从Widget中删除一个元素时,我想制作那些QGraphicsItem来更改它们的图像、文本等。换句话说,我想让它们表现得像某种容器,可以显示被丢弃的元素。大部分功能已经实现,但我无法使QGraphicsItem与QGraphicsScene同时接受丢弃事件。当其中一个工作时,另一个不工作。

在我的QGraphicsScene中的每个"拖动"事件的末尾,我插入了以下代码:

void SpatialScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
    (...)
    QGraphicsScene::dragEnterEvent(event);
}

当我这样做的时候,到达我的QGraphicsItem的事件很好,但我所有的丢弃事件都被QGraphicsScene拒绝了,我没有Ideia为什么。(我在dropEvent方法中收到IgnoreAction)。

我不知道我是否已经把我的问题说清楚了,但是。。。有人能帮我吗?如何使QGraphicsScene及其QGraphicsItem都接受丢弃事件?

我刚刚遇到了同样的问题,并在另一个线程中找到了解决方案。

这里的技巧是也接受QGraphicsScene::dragMoveEvent()中的事件!

原因是DEFAULT实现在鼠标下没有项的情况下忽略拖放事件!

另请参阅:http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Drops