QGraphicsScene::itemAt() 无法正常工作

QGraphicsScene::itemAt() not working properly

我试图找出鼠标下的 QGraphicsItem(当鼠标悬停在该项目上时)。为此,我正在使用 itemAt() 方法,但 itemAt() 没有返回 QGraphicsItem。
我这样试过:

bool myViewer::eventFilter(QObject *watched, QEvent *event)
{
    bool fEvent = false;
    switch(event->type())
    {
        case QEvent::MouseButtonPress:
        {....}
        case QEvent::MouseButtonRelease:
        {...}
        case QEvent::Enter:
        {
           QMouseEvent * mouseEvent = static_cast<QMouseEvent *>(event);
           qDebug()<<"Event points = "<< mouseEvent->pos(); // showing points properly
           QPointF po = _view->mapToScene(mouseEvent->pos());       
           
           QGraphicsRectItem* rItem = qgraphicsitem_cast<QGraphicsRectItem*>(_scene->itemAt(po,QTransform()));
           if(rItem)
           {
              // some logic
           }
        }
          return true;

       default:
           break;
    }
    return fEvent;

         

我也尝试过 QGraphicsView::itemAt()。但是还是不行。
注意:在这两种方式下,以下几行都可以正常工作。

 QMouseEvent * mouseEvent = static_cast<QMouseEvent *>(event);
 qDebug()<<"Event points = "<< mouseEvent->pos();     
 

我哪里错了?

也许你可以尝试处理 QEvent::GraphicsSceneMousePress

然后获取如下位置(伪代码,未测试)

//Get the scene event object.
QGraphicsSceneMouseEvent* sceneEvent = dynamic_cast<QGraphicsSceneMouseEvent*>(qevent);

//From the scene event object get the scene position.
QPointF po = sceneEvent->scenePos();

使用该位置找到项目。