如何在QGraphicsItem派生类中接收鼠标事件? Qt的

时间:2017-08-04 14:20:09

标签: c++ qt qgraphicsview qgraphicsitem qmouseevent

已经有关于此的线索,但我找到的解决方案不起作用。 解: 在QGraphicsView派生类的MousePressEvent类的末尾写QGraphicsView::MousePressEvent(event);。 两者都不起作用。 QGraphicsItem类不接收鼠标事件。 这是我的QGraphicsView类中的MousePressEvent:

void GraphWidget::mousePressEvent(QMouseEvent *event){
    mousePressed = true;

    if (event->button() == Qt::RightButton) // doesn't matter
    {
        rightMousePressed = true;
        _panStartX = event->x();
        _panStartY = event->y();
        setCursor(Qt::ClosedHandCursor);
        event->accept();
        return;
    }

    // And I tried this: QGraphicsView::mousePressEvent(event);
}

这是我的QGraphicsItem类中的MousePressEvent:

void Node::mousePressEvent(QGraphicsSceneMouseEvent *event){
    mousePressed = true;
    qDebug() << "mouse trigered!";
}

任何想法,我忘记了什么?

1 个答案:

答案 0 :(得分:0)

ANSWER 永远不要忘记致电

QGraphicsView::mousePressEvent(event); /
QGraphicsView::mouseReleaseEvent(event); /
QGraphicsView::mouseMoveEvent(event);
...

在每个mouseEvent结束时,你在QGraphicsView派生类中进行覆盖(在mouseMoveEvent中使用QGraphicsView :: mouseMoveEvent(event)等等)。 否则真的会发生奇怪的事情。 此外,如果您甚至没有在QGraphicsItem派生类中使用其中的一些,请在每个事件中调用它。