在QT中一次鼠标按下几个QGraphicsItem

时间:2010-11-17 16:21:03

标签: c++ qt mouseevent mouseover qgraphicsitem

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

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

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

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

当我从应用程序中拖动一些文本时,它会像我想要的那样工作,但当我“拖动”一个QGrahphicsItem时却不行。

使用QGraphicsItem可以拖动的唯一解决方案是能够在用鼠标单击鼠标悬停在事件上时触发事件吗?

2 个答案:

答案 0 :(得分:1)

我建议使用mouseMoveEvent()

修改:父mouseMoveEvent()的{​​{1}}。

答案 1 :(得分:1)

我自己找到了解决方案。我将所有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()));
        }
    }
}

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