我的QGraphicsItem的的在QGraphicsScene一个矩阵,当我点击一个元素它改变它的颜色。这与mousePressEvent()实现。我希望能够点击并按住,然后将光标移到其它的QGraphicsItem的,并改变它们的颜色也因此引发他们mousePressEvent()

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

我想一个解决办法是使的QGraphicsItem的拖拽能力,并使用QT拖放功能这一点。事实上,我有这样的:

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

当我从拖动应用在元素上一些文字它像我想它,但不是当我“拖”一个QGrahphicsItem。

所以是制造一种的QGraphicsItem dragable能够触发事件而鼠标悬停在与点击的鼠标按钮的唯一解决方案?

有帮助吗?

解决方案 2

我找到了解决自己。我说我所有的QGraphicsRectItem的一个QGraphicsItemGroup并实施了该组的活动。在集团:: 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()));
        }
    }
}

如果你有同样的问题,需要释放更多的信息感觉与我联系。

其他提示

我推荐使用mouseMoveEvent()

编辑:父mouseMoveEvent()QGraphicsView

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top