我有一个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周围点击它,它都无法检测并返回该项目。非常感谢任何帮助。
答案 0 :(得分:1)
如果您的线使用化妆笔(宽度为零),则表示shape()
方法将返回零宽度QPainterPath
(source code,搜索“qt_graphicsItem_shapeFromPath”)。
您必须从QGraphicsLineItem
派生并重新实现shape()
,才能将QPainterPathStroker
的最小笔宽限制在合理范围内。