首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旋转后的QGraphicsSvgItem定位

旋转后的QGraphicsSvgItem定位
EN

Stack Overflow用户
提问于 2014-10-28 01:06:24
回答 1查看 1K关注 0票数 0

当我尝试旋转QGraphicsSvgItem对象并设置位置时,我遇到了一个奇怪的问题/功能。

检查以下示例:为了简单起见,我有一个.svg,它是一个蓝色矩形。我使用该文件创建了两个QGraphicsSvgItem,并以90度旋转其中的一个。我把它们放在相同的位置,但是旋转的那个放错了位置(也许这才是正确的行为)。看起来x,y坐标(左上角)现在是右上角,它仍然没有旋转。从我的角度来看,这看起来很奇怪,我希望当我旋转和设置位置时,形状的“第一个点”应该是形状“开始”的地方。

我希望我上面写的源代码更容易理解:

代码语言:javascript
复制
    SVGDom *bubbleDom = shadowgram->bubble();
    _bubble = new DrawableSvgItem(sh->message(), bubbleDom->byteArray());
    this->addItem(_bubble);
    _bubble->setPos((this->width()-_bubble->sceneBoundingRect().width()) / 2, (this->height() - _bubble->sceneBoundingRect().height()) / 2);
    qDebug() <<"Bubble pos: " << _bubble->pos();
    qDebug() <<"Bubble boundindRect: " << _bubble->boundingRect();
    qDebug() << "Bubble rect: " <<_bubble->sceneBoundingRect();
    qDebug() << "Bubble topleft: " <<_bubble->sceneBoundingRect().topLeft();

    DrawableSvgItem *bubble2 = new DrawableSvgItem(sh->message(), bubbleDom->byteArray());
    this->addItem(bubble2);
    bubble2->setRotation(90);
    bubble2->setPos(_bubble->pos());
    qDebug() << "Bubble2 pos: " << bubble2->pos();
    qDebug() <<"Bubble2 boundindRect: " << bubble2->boundingRect();
    qDebug() << "Bubble2 rect: " <<bubble2->sceneBoundingRect();
    qDebug() <<"Bubble2 topleft: " << bubble2->sceneBoundingRect().topLeft();

DrawableSvgItem只是QGraphicsSvgItem的一个扩展,我创建它是为了将源路径绘制到项目中。目前我还没有使用它。

输出:

代码语言:javascript
复制
Bubble pos:  QPointF(413.5, 297)
Bubble boundindRect:  QRectF(0,0 171x117)
Bubble rect:  QRectF(296.5,297 117x171)
Bubble topleft:  QPointF(296.5, 297)
Bubble2 pos:  QPointF(413.5, 297)
Bubble2 boundindRect:  QRectF(0,0 171x117)
Bubble2 rect:  QRectF(411.458,297 173.016x119.967)
Bubble2 topleft:  QPointF(411.458, 297)

在图片中,我希望有以下几点:

但是我得到了下面的图片:

我发现了一个类似的问题here

EN

回答 1

Stack Overflow用户

发布于 2014-10-28 06:44:31

bubble2围绕其变换原点旋转。在bubble2的坐标中默认为0,0。此外,bubble2->setPos()将该点设置为_bubble的0,0,因此您只需将bubble2->setPos()调整为所需的位置。您可以通过setTransformOriginPoint()更改变换原点。

编辑5.11.2014:

bubble2的左上角是以冒泡2坐标定义的。这些坐标不会因项目变换而改变,旋转后项目的左上角与以前一样。该点由setPos()放置。因此,图2显示了正确的行为。你想放在冒泡(x,y)上的角是冒泡2的左下角。要获得图片1,您只需在代码中添加一行代码:或者将最后一步中的bubble2向右移动其高度

代码语言:javascript
复制
bubble2->setpos(413.5 + 117, 297)

或者作为第一步,将bubble2的变换原点设置为左下角

代码语言:javascript
复制
bubble2->setTransformOriginPoint(0,117)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26592900

复制
相关文章

相似问题

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