使用QGraphicsScene ItemAt()来检测QGraphicsLineItem

时间:2013-05-04 05:14:04

标签: qt

我有一个QGraphicsScene,它存储QGraphicsLinesItems和QGraphicsRectItems。

我正在使用QGraphicsScene方法来接受itemsAt(),我通过x和y co ordiantes来返回QGraphicsItem并使用以下内容:

        QPointF getItemPos= this->mapToScene(this->mapFromGlobal(QCursor::pos()));
        QGraphicsItem *itm  = scene->itemAt(getItemPos.x(),getItemPos.y());
        QGraphicsLineItem *lineItm;
        QGraphicsRectItem *rectItm;
        if((lineItm = dynamic_cast<QGraphicsLineItem*>(itm))){
            // do stuff with as_pnedge
            qDebug("Line");
        }else if((rectItm = dynamic_cast<QGraphicsRectItem*>(itm))){
            // do stuff with as_pnitem
            qDebug("Rect");
        }
        else
        {
            qDebug("Select Item");
        }

我遇到的问题是QGraphicsRectItem返回正常并且可以被检测到。但无论我在QGraphicsLineItems周围点击它,它都无法检测并返回该项目。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果您的线使用化妆笔(宽度为零),则表示shape()方法将返回零宽度QPainterPathsource code,搜索“qt_graphicsItem_shapeFromPath”)。

您必须从QGraphicsLineItem派生并重新实现shape(),才能将QPainterPathStroker的最小笔宽限制在合理范围内。