首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QGraphicsSvgItem的中心定位在一个位置上。

将QGraphicsSvgItem的中心定位在一个位置上。
EN

Stack Overflow用户
提问于 2014-09-29 14:21:10
回答 2查看 461关注 0票数 2

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

因此,请建议如何在x=50处对齐svgitem的中心,y =50

EN

回答 2

Stack Overflow用户

发布于 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函数。

代码语言:javascript
复制
QRectF boundingRect() const
{
    return QRectF(-25, -25, 50, 50);
}

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

代码语言:javascript
复制
item->setPos(50, 50);
票数 1
EN

Stack Overflow用户

发布于 2014-09-29 23:20:46

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

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26093608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档