【问题标题】:How to accept both QGraphicsScene and QGraphicsItem drop event如何同时接受 QGraphicsScene 和 QGraphicsItem 放置事件
【发布时间】:2015-02-06 22:04:43
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你想在物品和场景中接受相同的掉落事件吗?或者您说的是 2 种不同的掉落物(一种掉落到物品上,另一种掉落到场景中的空白处)?
  • @PavelStrakhov 第二个选项(一个用于项目,另一个用于空白空间)。如果我将文件放在场景中,我想创建一个由我的 QGraphicsItem 表示的新“容器”,但如果我对现有项目之一进行相同的放置,我想将其更新为新文件。 PS:感谢您的回答:)

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2016-04-09
    相关资源
    最近更新 更多