gpt4 book ai didi

c++ - 为已经转换的QGraphicsItem设置转换原点

转载 作者:行者123 更新时间:2023-12-03 07:03:21 25 4
gpt4 key购买 nike

我有一只机械手,其中包含两个相连的移动臂。当arm1旋转时,arm2也围绕arm1的相同原点旋转。当arm2旋转时,arm1不应移动,而arm2应该绕arm2原点旋转。

    QPixmap arm1(":/new/prefix2/pictures/arm1.png");
QPixmap arm2(":/new/prefix2/pictures/arm2.png");

QGraphicsPixmapItem *arm1p = new QGraphicsPixmapItem(arm1);
QGraphicsPixmapItem *arm2p = new QGraphicsPixmapItem(arm2);

QGraphicsScene *scene = new QGraphicsScene();

arm1p->setScale(scale);
arm1p->deviceTransform(ui->graphicsView->viewportTransform()).map(QPointF(0,0));

arm2p->setScale(scale);
arm2p->deviceTransform(ui->graphicsView->viewportTransform()).map(QPointF(0,0));
以下代码用于围绕arm1原点旋转arm1和arm2。
    arm1p->setTransformOriginPoint(29,375);
arm1p->setPos(((29*scale)-29)+(390*scale),((375*scale)-375)+(106*scale));
arm1p->setRotation(arm1angle);

arm2p->setTransformOriginPoint(-581,478);
arm2p->setPos(((-581*scale)-(-581))+(1004*scale),((478*scale)-478)+(0*scale));
arm2p->setRotation(arm1angle);
而且效果很好。
但是,当我只想旋转arm2时,我希望arm1和arm2保持其位置,并只是绕着不同的原点旋转arm2。我编写了以下代码,但运行不正常。
    arm1p->setTransformOriginPoint(29,375);
arm1p->setPos(((29*scale)-29)+(390*scale),((375*scale)-375)+(106*scale));
arm1p->setRotation(arm1angle);

arm2p->setTransformOriginPoint(-581,478);
arm2p->setPos(((-581*scale)-(-581))+(1004*scale),((478*scale)-478)+(0*scale));
arm2p->setRotation(arm1angle);

arm2p->setTransformOriginPoint(97,148);
arm2p->setRotation(arm2angle);
在保持arm1旋转和位置不变的同时,如何让arm2绕其原点旋转?

最佳答案

通过使用setOffsetmapFromItem可以简单地解决问题,最终代码是:

    QPointF c1 = arm1p->mapFromItem(bodyp,423,188);
arm1p->setOffset(-29,-375);
arm1p->setPos(c1.x()*scale,c1.y()*scale);
arm1p->setRotation(arm1angle);

QPointF c2 = arm2p->mapFromItem(arm1p,712-29,42-375);
arm2p->setOffset(-97,-148);
arm2p->setPos(c2.x()*scale,c2.y()*scale);
arm2p->setRotation(arm1angle + arm2angle);

关于c++ - 为已经转换的QGraphicsItem设置转换原点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64779452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com