如何将本地坐标用于QGraphicsItem

时间:2015-02-06 22:51:01

标签: qt qgraphicsview qgraphicsitem qgraphicsscene

我创建了一个自定义的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);
}

2 个答案:

答案 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

希望有所帮助。