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

标签 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!";
}

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

最佳答案

回答 永远不要忘记打电话

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

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

关于c++ - 如何在 QGraphicsItem 派生类中接收鼠标事件? Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509200/

相关文章:

c++ - <chrono> 中的用户定义文字重载

c++ - Qt非矩形窗口

qt - 如何使用 QGraphicsView 的 translate() 函数?

c++ - C++ 中特定位置映射的迭代器

c++ - pthread_mutex 锁是否比用户在代码中强加的内存屏障提供更高的性能

C++:在编译时消除这段代码的歧义?

python - QGraphicsGridLayout 适用于 PySide 但不适用于 PyQt4

c++ - 如何使用表单扩展 QTabWidget

c++ - 对 QImage 执行深拷贝

c++ - 如果选择了项目,为什么 QGraphicsItem 子级不再单击鼠标?