首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt如何向场景中添加带有偏移量的项目?

Qt如何向场景中添加带有偏移量的项目?
EN

Stack Overflow用户
提问于 2014-04-16 09:31:20
回答 1查看 162关注 0票数 0

我在一行的底部添加了一个项目符号(QGraphicsItem)。advance方法在项目中移动项目,使其看起来像来自行的顶端。添加碰撞后,此操作不起作用。有没有一种方法可以给setPos(x,y)值添加一个偏移量,使它出现在行尾而不是根部。

此外,这条线旋转了360度角,因此它需要平移到它所指向的任何地方。

代码语言:javascript
复制
//function that adds item to base of line created

    qreal dirx = m_FireTarget1.x()+140;
    qreal diry = m_FireTarget1.y()-195;


    qreal length = sqrt(dirx*dirx+diry*diry);
    if (length!=0)
    {
        // normalized direction vector
        qreal invLength= 1.0/length;
        dirx *= invLength;
        diry *= invLength;

        // creating an angle perturbation of +/- 3°
        qreal alphaPerturbation = static_cast<qreal>(qrand()%6-3) * M_PI / 180.0;
        qreal xPerturbation = cos(alphaPerturbation);
        qreal yPerturbation = sin(alphaPerturbation);

        dirx = dirx*xPerturbation - diry*yPerturbation;

        diry = diry*xPerturbation + dirx*yPerturbation;

        GraphicsCircle * circle = new GraphicsCircle(dirx, diry, -140, 195);
        addItem(circle);

-140,195是创建直线的基础。看来我已经照你说的做了,我相信。

EN

回答 1

Stack Overflow用户

发布于 2014-04-17 00:30:45

假设您的行有一个特定的degreeAngle,并且您想要在该方向上将项目符号移动到某个distance,您必须这样做:

代码语言:javascript
复制
// cos and sin functions get radians angle as argument so you must convert it
radiansAngle = degreeAngle * PI / 180;
offsetX = distance * cos(radiansAngle);
offsetY = distance * sin(radiansAngle);

在您的情况下,这将转换为:

代码语言:javascript
复制
qreal radiansAngle = line.angle() * M_PI / 180;
qreal offsetX = line.length() * cos(radiansAngle);
qreal offsetY = line.length() * sin(radiansAngle);

所以你的新位置是旧位置加上偏移量:

代码语言:javascript
复制
qreal newX = -140 + offsetX;
qreal newY =  195 + offsetY;

很抱歉,我不能理解如何将参数传递给GraphicsCircle构造函数,但是如果GraphicsCircle * circle = new GraphicsCircle(dirx, diry, -140, 195);将圆放置到坐标(-140,195),那么您应该使用...

代码语言:javascript
复制
GraphicsCircle * circle = new GraphicsCircle(dirx, diry, newX, newY);
addItem(circle);

...to把它放到新的坐标上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23097420

复制
相关文章

相似问题

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