C++ 如何接受QGraphicscene和QGraphicsItem drop事件

C++ 如何接受QGraphicscene和QGraphicsItem drop事件,c++,qt,events,drag-and-drop,C++,Qt,Events,Drag And Drop,我正在做一个项目,我正在使用QGraphicscene使用QGraphicsSitem显示一些多媒体对象,如图像和文本。我有一个小部件,可以将一些文件从用户计算机拖放到场景中,从而触发新的QGraphicsItem的创建 好的,现在我要做的是。。。我想让那些QGraphicsItem在我从小部件中删除元素时更改它们的图像、文本等。换句话说,我想让它们表现为某种容器,可以显示被删除的元素。大部分功能已经实现,但我不能让我的QGraphicsSitem与我的QGraphicscene同时接受丢弃事件

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

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

在我的QGraphicscene中的每个“拖动”事件结束时,我插入了以下代码:

void SpatialScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
    (...)
    QGraphicsScene::dragEnterEvent(event);
}
当我这样做的时候,到达我的QGraphicsSite的事件我很好,但是我的所有丢弃事件都被QGraphicsCenter拒绝了,我不知道为什么。(我在dropEvent方法中收到一个IgnoreAction)


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

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

这里的诀窍是还接受QGraphicscene::dragMoveEvent()中的事件

原因是默认实现忽略了拖放事件,如果鼠标下没有任何项目

另请参阅:


是否要在项目和场景中接受相同的放置事件?或者你说的是两种不同的跌落(一种跌落到物品上,另一种跌落到场景中的空白处)?@PavelStrakhov第二种选择(一种跌落到物品上,另一种跌落到空白处)。如果我在场景中放置文件,我希望创建一个由QGraphicsItem表示的新“容器”,但是如果我在现有项目中放置相同的文件,我希望将其更新为新文件。附言:谢谢你的回答:)