如何使用QGraphicsView的缩放级别缩放QGraphicsEllipseItem

时间:2013-08-06 14:58:59

标签: c++ qt 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,因为它们是共享指针

3 个答案:

答案 0 :(得分:2)

好吧,ignoreTransformation确实是一个正确的方法。

  

QGraphicsItem :: ItemIgnoresTransformations :该项忽略继承的转换(即,其位置仍锚定到其父级,但忽略父级或视图的旋转,缩放或剪切转换)。此标志对于使文本标签项保持水平和未缩放非常有用,因此如果转换视图,它们仍然可读。设置后,项目的视图几何体和场景几何体将单独维护。您必须调用deviceTransform()来映射坐标并检测视图中的碰撞。默认情况下,禁用此标志。这个标志是在Qt 4.3中引入的。

关于停留在中间,你应该将场景中的椭圆移动到正确的位置,这样它们就有了适当的场景坐标,然后你指示忽略视图的转换,所以它们会忽略任何缩放/ rotation / etc,如文档中所述。

答案 1 :(得分:2)

Qt文档说明了关于标志QGraphicsItem :: ItemIgnoresTransformations: -

  

该项目忽略继承的转换(即,其位置为   仍锚定到其父级,但父级或视图旋转,缩放或   剪切变换被忽略)。

这是你想要的。您已将项目添加到QGraphcisItemGroup。为此,Qt帮助说: -

  

QGraphicsItemGroup忽略其上的ItemIgnoresTransformations标志   儿童(即,关于团体项目的几何形状,   孩子们被视为可以转化的。)

阅读此内容,QGraphicsItem使用基于其父级的ItemIgnoreTransformations标志,在您的情况下是QGraphicsGroup,但此类忽略其子级上的标志,这可能会导致您看到的问题。

因此,不要在父组上设置标志,而是在其子组上设置标志。

答案 2 :(得分:1)

尝试在要保持不变大小的对象上设置ItemIgnoresTransformations标志。