如何在Qt的QGraphicsView中创建任意大小的点?

时间:2014-04-06 16:30:50

标签: c++ qt

我希望在GraphicsView中绘制一个句点或点或点:

  • 具有任意大小,其作用类似于圆的半径,

  • 受缩放变换的影响,因为它的位置会根据当前比例而改变,

  • 但其任意大小不受缩放影响。

我特别关注的问题是描绘太阳系可视化器中的天体。我希望与彼此保持适当的距离,但是空间是难以想象的空洞 - 试图描绘具有适当半径的地球大小的物体会使观众很难实际看到任何东西,如果所述用户缩小到足够看其他星球。因此,我想用直径不会缩放的点标记位置,而其他所有位置(如轨道路径,距离)都会缩放。

我曾尝试使用ItemIgnoresTranformations,但这会使对象忽略尺寸更改和更改比例时的位置更改。我希望无论比例如何,对象都会引人注目,但同时也要让它处于适当的位置。

欢迎替代解决方案。

EDIT1:

新代码如下:

ellipse2 = scene->addEllipse(0, 0, body.radius,body.radius,blackPen,greenBrush); 
ellipse2->setFlag(QGraphicsItem::ItemIgnoresTransformations);
ellipse2->setPos(system.starX+body.getX(date2days(game.date))-body.radius/2.0,
                 system.starY+body.getY(date2days(game.date))-body.radius/2.0);

以前,该位置只是放在addElipse()调用中的0位置。然而,存在一个问题 - 行星的运动与绘制的轨道路径不完全匹配(我目前正在简化为具有恒定角速度的完美圆,而不是具有可变角速度的椭圆路径)。实际路径似乎被一些未知(但依赖于比例)的量向左上方移动。

以下是它看起来如何unzoomed:
Before
以下是它的缩放方式:
After

如果项目受到转换的影响,则不会发生此问题。是什么给了什么?

1 个答案:

答案 0 :(得分:2)

发现问题。我需要调整矩形中的行星半径,而不是位置。

正确的代码如下:

ellipse2 = scene->addEllipse(-body.radius/2,
                             -body.radius/2,
                             body.radius,body.radius,blackPen,greenBrush);
ellipse2->setFlag(QGraphicsItem::ItemIgnoresTransformations);
ellipse2->setPos(system.starX+body.getX(date2days(game.date)),
                 system.starY+body.getY(date2days(game.date)));