定位QGraphicsSvgItem的中心位置。

时间:2014-09-29 06:21:10

标签: c++ qt svg

我在QGraphicsScene上创建了一个QGraphicsSvgItem,大小为48x48。 我想设置它的中心位于Q = 50和y = 50的QGraphicsScene(默认情况下QGraphicsScene位置是svg项目的左上角)。 我继承了QGraphicsSvgItem并重新实现了它的绘制功能,然后在x = -24 y = -24处应用了一个平移操作,但是它显示了svg项目的1/4右底形状可见。

所以请建议,如何将svgitem的中心对齐x = 50,y = 50

2 个答案:

答案 0 :(得分:1)

默认情况下,QGraphicsItem的本地左上角为(0,0)。但是,如果您从QGraphicsItem继承,则可以更改它,以便(0,0)是项目的中心。

这由boundingRect()函数处理。如果你有一个高度和宽度为50的项目,默认的边界矩形将返回(0,0,50,50)(x,y,w,h)。

使本地中心(0,0)覆盖boundingRect函数以返回(-25,-25,50,50)。

QRectF boundingRect() const
{
    return QRectF(-25, -25, 50, 50);
}

然后,要将项目置于(50,50)的场景中心,您只需将项目的位置设置为该坐标

item->setPos(50, 50);

答案 1 :(得分:0)

还需要重新实现QGraphicsSvgItem的paint方法

QRectF boundingRect() const
{
        return QRectF(-24,-24,48,48);
}


void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->translate(-24,-24);
    QGraphicsSvgItem::paint(painter,option,widget);
}