如何接受QGraphicsScene和QGraphicsItem drop事件

时间:2015-02-06 22:04:44

标签: c++ qt events drag-and-drop

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

好的,现在这就是我要做的......当我从Widget中删除一个元素时,我想让那些QGraphicsItem改变它们的图像,文本等等。换句话说,我想让它们表现为某种可以显示掉落元素的容器。大部分功能已经实现,但我不能让我的QGraphicsItem在我的QGraphicsScene的同时接受drop事件。当其中一个工作时,另一个不工作。

在我的QGraphicsScene的每个“拖动”事件结束时,我插入了这段代码:

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

当我这样做时,到达我的QGraphicsItem的事件就好了,但是我的所有掉落事件都被QGraphicsScene拒绝了,我没有Ideia为什么。 (我在dropEvent方法中收到了一个IgnoreAction。)

我不知道我是否已将问题清楚但是......有人可以帮我解决这个问题吗?如何让QGraphicsScene及其QGraphicsItem接受放置事件?

1 个答案:

答案 0 :(得分:0)

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

  

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

     

原因是DEFAULT实现,如果鼠标下没有任何项目,该实现将忽略拖放事件!

     

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