我正在尝试在场景中找到鼠标下的项目。我使用的代码如下:
QPainterPath mousePath;
mousePath.addEllipse(mouseEvent -> pos(),5,5);
QList<QGraphicsItem *> itemsCandidate = this->items(mousePath);
if (!(itemsCandidate.contains(lastSelectedItem))) lastSelectedItem =itemsCandidate.first();
PS:这是指一个场景。
代码应该找到与鼠标位置周围的小圆相交的项目,如果前一个相交的项目仍然相交,则保持项目指针不变,否则在QList中取第一个。
不幸的是,此代码不适用于彼此内的项目。例如,如果我有一个Rect侧的Rect,外部Rect总是与鼠标位置相交,即使这个位于内部Rect附近。我怎么解决这个问题?
更新:这似乎不是多边形的问题,而是使用Rect,Ellipses等。
更新:此代码位于重新定义的场景:: mouseMoveEvent
中答案 0 :(得分:0)
您可以在mouseMoveEvent
中重新实现QGraphicsView
以捕获视图中的鼠标移动事件并跟踪鼠标附近的项目,如:
void MyView::mouseMoveEvent(QMouseEvent *event)
{
QPointF mousePoint = mapToScene(event->pos());
qreal x = mousePoint.x();
qreal y = mousePoint.y();
foreach(QGraphicsItem * t , items())
{
int dist = qSqrt(qPow(t->pos().x()-x,2)+qPow(t->pos().y()-y,2));
if( dist<70 )
{
//do whatever you like
}
}
QGraphicsView::mouseMoveEvent(event);
}