如何使用QGraphicsView的缩放级别缩放QGraphicsEllipseItem
How to scale a QGraphicsEllipseItem with the Zoom Level of QGraphicsView
我在一个小部件上有一个QGraphicsView,它正在向.添加一些项目
当我缩放图形视图时,其中一些是多边形,一些是椭圆(均为QGraphicsItems)
void Test::on_verticalSlider_sliderMoved(int position)
{
ui->graphicsView->scale(1.1,1.1);
}
椭圆越来越大,但我希望它们缩小,这样无论我放大多远,它们基本上都保持不变,所以基本上我希望多边形放大,但不是我在这些多边形上绘制的点。。。如果这是合理的
不知道这会让事情变得更容易,但任何时候绘制的所有椭圆点都在同一个QGraphicsItemGroup内,所以我可以在整个组上设置一个标志来实现这一点?
不管怎样,如果能帮上这个,我将不胜感激
感谢
编辑------代码示例
item是QGraphicsEllipseItem,m_group_point是QGraphicsItemGroup
item->setParentItem(m_group_point.get());
然后我将该组添加到场景
m_scene2->addItem(m_group_point.get());
然后将该场景添加到视图
ui->graphicsView->setScene(m_scene2.get());
它们是.get
,因为它们是共享指针
嗯,ignoreTransformation确实是一个合适的方法。
QGraphicsItem::ItemIgnoresTransformations:该项忽略继承的变换(即,其位置仍固定到其父项,但忽略父项或视图旋转、缩放或剪切变换)。此标志有助于保持文本标签项的水平和不缩放,因此在转换视图时它们仍然可读。设置后,项目的视图几何体和场景几何体将分别保留。必须调用deviceTransform()来映射坐标并检测视图中的碰撞。默认情况下,此标志处于禁用状态。此标志在问题4.3中引入。
关于保持中间,您应该将场景中的椭圆移动到适当的位置,以便它们具有适当的场景坐标,然后您指示忽略视图的变换,以便它们忽略文档中提到的任何缩放/旋转等。
Qt文档说明了这一点关于标志QGraphicsItem::ItemIgnoresTransformations:-
该项忽略继承的转换(即其位置为仍然定位到其父对象,但父对象或视图旋转、缩放或剪切变换被忽略)。
这就是你想要的。您已将项目添加到QGraphcisItemGroup中。对此,Qt帮助声明:-
QGraphicsItemGroup忽略其子项(即,关于组项目的几何结构孩子们被当作是可变形的)。
了解到这一点,QGraphicsItem基于其父项使用ItemIgnoreTransformations标志,在您的情况下是QGraphicsGroup,但此类忽略其子项上的标志,这可能会导致您看到的问题。
因此,不要在父组上设置标志,而是在其子组上设置。
尝试在要保持恒定大小的对象上设置ItemIgnoresTransformations标志。
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- QwtPlot具有相等的轴和自动缩放
- 如何在directx/c++中进行平移/缩放操作
- 在Qt中实现无限可缩放的画布
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何在OpenGL(GLFW,很高兴)中进行2D缩放?
- 改变或缩放两个正态分布以具有特定的相关系数
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在OpenGL中正确旋转和缩放对象?
- 仅当类型为 std::complex 时,才进行缩放
- 将 VS Code 用于跨平台可缩放C++项目
- 根据帧速率缩放/缩小数字
- 在 c++ 中缩放浮点值
- 如何防止 DirectX C++程序的拉伸/缩放
- 使用提升几何缓冲区缩放多边形时的冗余折点
- 为什么我不能使用 Sphere 来缩放字形?
- 我在QChartView中找不到缩放图形的鼠标滚轮滚动事件