C++ 如何在Qt'中创建任意大小的点;什么是QG视图?

C++ 如何在Qt'中创建任意大小的点;什么是QG视图?,c++,qt,C++,Qt,我希望在图形视图中绘制一个句点或点: 具有任意大小,其作用类似于圆的半径 受缩放变换的影响,因为其位置会根据当前比例进行更改 但其任意大小不受缩放的影响 我要特别解决的问题是在太阳系可视化仪中描绘天体。我想让物体彼此之间保持适当的距离,但空间是无法想象的空旷——试图描绘一个具有适当半径的地球大小的物体会使观看者很难真正看到任何东西,如果说用户放大到足以看到其他行星的话。因此,我想用直径不按比例缩放的点来标记位置,而其他所有东西(如轨道路径、距离)都按比例缩放 我曾尝试使用ItemIgnore

我希望在图形视图中绘制一个句点或点:

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

  • 受缩放变换的影响,因为其位置会根据当前比例进行更改

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

我要特别解决的问题是在太阳系可视化仪中描绘天体。我想让物体彼此之间保持适当的距离,但空间是无法想象的空旷——试图描绘一个具有适当半径的地球大小的物体会使观看者很难真正看到任何东西,如果说用户放大到足以看到其他行星的话。因此,我想用直径不按比例缩放的点来标记位置,而其他所有东西(如轨道路径、距离)都按比例缩放

我曾尝试使用ItemIgnoresTranformations,但这会使对象在比例改变时忽略大小变化和位置变化。我希望物体无论大小都能被注意到,但同时它也要处于适当的位置

欢迎其他解决方案

编辑1:

新代码如下所示:

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的位置。然而,有一个问题——行星的运动与绘制的轨道路径不太匹配(我目前正在简化为具有恒定角速度的完美圆,而不是具有可变角速度的椭圆路径)。实际路径似乎向左上方移动了一些未知量(但取决于比例)

以下是未缩放的外观:

下面是它的放大效果:


如果项目受转换影响,则不会出现此问题。给出了什么?

发现了问题。我需要调整直线的行星半径,而不是位置

正确的代码如下所示:

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)));

QGraphicsItem::itemIgnorestTransformation
应该完全按照您的要求执行。问题可能是如何在场景中添加项目。看问题,谢谢!这有所帮助,但结果仍有微妙的错误。我已经编辑了一个解释。我突然想到问题可能是body.radius-但是我如何确定当前的缩放比例来缩放它?找到了问题并发布了解决方案。