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();
使用该位置找到项目。
我试图找出鼠标下的 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();
使用该位置找到项目。