gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:07 25 4
gpt4 key购买 nike

我想在 GraphicsView 中画一个句点或点:

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

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

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

我要专门解决的问题是在太阳系可视化工具中描绘天体。我想制作彼此之间适当距离的东西,但空间是难以想象的空旷 - 试图描绘一个具有适当半径的地球大小的物体将使观众很难真正看到任何东西,如果所述用户缩小到足以看看其他行星。因此,我想用不按直径缩放的点标记位置,而其他所有内容(如轨道路径、距离)按比例缩放。

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

这是未缩放时的样子:
Before
这是它放大后的样子:
After

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

最佳答案

发现问题。我需要调整 rect 中的行星半径,而不是 pos。

正确的代码如下:

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

关于c++ - 如何在 Qt 的 QGraphicsView 中创建任意大小的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22896793/

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