如何将局部坐标用于 QGraphicsItem

How to use local coordinates to a QGraphicsItem

我创建了一个自定义的 qGraphicsRectItem,并将其添加到我的 qGraphicsScene 中。我想使用它的本地坐标向这个自定义矩形添加文本(即添加到 0,0 将项目放在我的矩形的原点,无论它在我的场景中的什么位置) 当我尝试这样做时,它使用我场景的坐标系并且文本出现在矩形之外。有什么想法吗?

  PackageRect::PackageRect(QString PackageName, qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent)
    :QGraphicsRectItem(x, y, w,  h, parent)
{

    QGraphicsTextItem *text = new QGraphicsTextItem(PackageName, this);
    text->setPos(0,0);
}

对于 setPos 做 0,0 但 x, y。 对我来说:

rectText::rectText(QString PackageName, qreal x, qreal y, qreal w, qreal h, QGraphicsItem *parent)
    :QGraphicsRectItem(x, y, w,  h, parent)
{
    QGraphicsTextItem *text = new QGraphicsTextItem(PackageName, this);
    text->setPos(x, y);
}

文本在框中。

您尝试做的事情往往会用在 "Grouped" 项中。

有几个 mapTo* 函数,包括:

http://doc.qt.io/qt-5/qgraphicsitem.html

QPointF mapToItem(const QGraphicsItem * item, const QPointF & point) const
QPointF mapFromItem(const QGraphicsItem * item, const QPointF & point) const
QPointF mapFromScene(const QPointF & point) const
QPointF mapToScene(const QPointF & point) const

基本上,您从中调用映射函数的上下文会更改映射调用的行为。

如果您在 QGraphicsItem 的子类中,并且您调用 this->mapToItem(myRect, QPointF(0,0)); 它将 return 一个根据矩形坐标系的值。

同样,如果你在 QGraphicsItem 的子类中,你调用 this->mapFromItem(myRect, QPointF(0,0)); 它将 return 一个根据原始项目坐标系的值,其中0,0 是矩形的左上角。

这里有更多关于坐标系的文档:

http://doc.qt.io/qt-5/graphicsview.html#the-graphics-view-coordinate-system

但是,如果您将对象分组在 QGraphicsView 中,请将它们分组并四处移动。

http://doc.qt.io/qt-5/graphicsview.html#item-groups

http://doc.qt.io/qt-5/qgraphicsitemgroup.html#details

希望对您有所帮助。