我创建了一个自定义的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);
}
答案 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);
}
文字在方框内。
答案 1 :(得分:0)
你想要做什么,往往被用于" 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));
,它将返回一个矩形坐标系的值。
同样地,如果你在QGraphicsItem
的子类中,并且你调用this->mapFromItem(myRect, QPointF(0,0));
它将返回原始项的坐标系的值,其中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
希望有所帮助。