鼠标附近的QGraphicsScene中的项目

时间:2014-04-06 12:11:44

标签: qt qgraphicsscene

我正在尝试在场景中找到鼠标下的项目。我使用的代码如下:

    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

1 个答案:

答案 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);
}