2

我在 QGraphicsScene 中有一个 QGraphicsItem 矩阵,当我单击一个元素时,它会改变它的颜色。这是用mousePressEvent(). 我希望能够单击并按住然后将光标移到其他 QGraphicsItem 上并更改它们的颜色,从而触发它们的mousePressEvent().

问题是由于鼠标抓住了第一个元素,我单击“保留”了所有事件并且hoverEnterEvent()没有被触发。我尝试添加ungrabMouse()mousePressEvent()但没有帮助。

我想一种解决方案是使 QGraphicsitem 可以拖动并为此使用 QT 拖放功能。事实上我有这个:

void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
    changeColor();
}

当我从应用程序中将一些文本拖到元素上时,它就像我想要的那样工作,但当我“拖动”一个 QGrahphicsItem 时却不是。

那么,使 QGraphicsItem 可拖动以便能够在单击鼠标按钮悬停在事件上时触发事件的唯一解决方案是什么?

4

2 回答 2

2

我自己找到了解决方案。我将所有 QGraphicsRectItem 添加到 QGraphicsItemGroup 并为该组实现了事件。在 Group::MouseMoveEvent() 中,我检查光标的位置并将事件应用于其子项。它看起来像这样:

void Group::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
{
    if (boundingRect().adjusted(0,0,-1,-1).contains(event->pos()))
    {
        if (CellCoordinate(event->pos()) != lastChangedCell_) {
            lastChangedCell_ = CellCoordinate(event->pos());
            modifyCell(CellCoordinate(event->pos()));
        }
    }
}

如果您有同样的问题并需要更多信息,请随时与我联系。

于 2010-11-29T23:26:58.233 回答
1

我建议使用mouseMoveEvent().

编辑:mouseMoveEvent()父母的QGraphicsView

于 2010-11-17T17:53:44.097 回答