我在一个大小为48x48的QGraphicsScene上创建了一个QGraphicsSvgItem。我想把它的中心设置在QGraphicsScene的SVG50和SVG50上(默认情况下,QGraphicsScene定位在y=项目的左上角)。我继承了QGraphicsSvgItem并重新实现了它的绘制函数,然后在x= -24 y= -24处应用了一个平移操作,但随后它显示了svg项目的1/4右下角可见。
因此,请建议如何在x=50处对齐svgitem的中心,y =50
发布于 2014-09-29 16:43:54
默认情况下,QGraphicsItem的局部左上角为(0,0)。但是,如果您从QGraphicsItem继承,则可以更改它,使(0,0)成为项目的中心。
这是由boundingRect()函数处理的。如果您有一个高度和宽度为50的项目,则默认的边界矩形将为(x,y,w,h)返回(0,0, 50,50)。
使本地中心(0,0)覆盖返回(-25,-25,50,50)的boundingRect函数。
QRectF boundingRect() const
{
return QRectF(-25, -25, 50, 50);
}然后,要将项目在场景中居中(50,50),您只需将项目的位置设置为该坐标
item->setPos(50, 50);发布于 2014-09-29 23:20:46
还需要重新实现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);
}https://stackoverflow.com/questions/26093608
复制相似问题