我試圖找出滑鼠下的 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();
我哪里錯了?
uj5u.com熱心網友回復:
也許你可以嘗試處理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();
使用該位置查找專案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/449621.html
標籤:C qt qt5 qgraphicsview qgraphics场景
上一篇:ModuleNotFoundError:沒有名為“qwt_text_label”的模塊
下一篇:Qt自定義繪制事件進度條
