1

我有一个存储 QGraphicsLinesItems 和 QGraphicsRectItems 的 QGraphicsScene。

我正在对 itemsAt() 使用 QGraphicsScene 方法,并通过 x 和 y 坐标返回 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 周围单击什么位置,它都无法检测到并返回该项目。任何帮助将不胜感激。

4

1 回答 1

1

如果您的线条使用化妆笔(宽度为零),则意味着该shape()方法将返回零宽度QPainterPath源代码,搜索“qt_graphicsItem_shapeFromPath”)。

您将不得不派生QGraphicsLineItem并重新实现shape()以将最小笔宽度限制在QPainterPathStroker合理的范围内。

于 2013-05-04T06:47:04.803 回答