如何将局部坐标用于 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
希望对您有所帮助。
我创建了一个自定义的 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
希望对您有所帮助。