缩放QGraphicsView而不缩放已添加到其中的QWidget
Scale a QGraphicsView without Scaling a QWidget that has been added to it
我已经将QGraphicsView子类化,使其具有一些使其放大和缩小的轮子事件。滚动滚轮时,调用缩放功能,缩放GraphicsView
if(zoom_in)
{
factor = 2.0;
}
else
{
factor = 0.5;
}
this->scale(factor, factor);
这可以很好地工作,并缩放场景中设置为图形视图的项目(这是我想要的功能)。
然而,我也有一个QWidget添加到这个场景。该小部件基本上应该是QGraphicsView的背景,它具有相同的尺寸,并在调整视图大小时调整大小以适应视图。
我知道你可以设置忽略翻译,并且已经完成了
proxyWidget = this->scene()->addWidget(myBackgroundWidget);
proxyWidget->setFlag(QGraphicsItem::ItemIgnoresTransformations);
因此,当视图被缩放时,小部件不会改变大小,这是正确的,但由于某种原因,它确实会移动,放大时会向上和向左移动,缩小时会向右移动。
我根本不明白为什么会发生这种情况,因为如果只是移除ItemIgnoresTransformations
标志并放大和缩小,它会完全保持在屏幕中心,但会改变大小,这显然不是我想要的
如果有人能对此有所了解,我将感谢的任何帮助
事实上,你观察到的是正常的。如果你不缩放项目,它将"看起来"转换,因为所有的图形视图都是缩放的。
实现目标的一种方法可能是定义一个根QGraphicsItem,并将您的小部件作为它的父级。在根项目的边界矩形函数中,您只需要在其中重新定位静态小部件,就可以避免这种翻译的印象。
IMO您不应该触摸QGraphicsView。最好的方法是拥有一些根QGraphicsItem(应该缩放的所有项的父项)
在场景中,可以有未缩放的项目(最顶端的父项未缩放),以及最顶端的子项正在处理鼠标滚轮事件并执行缩放的项目。
事实上,小部件的原点并没有移动(保持在相同的位置)。问题是,视图的中心很可能是缩放的中心,而您的小部件通过左上角连接到左上角
因此,为了解决这个问题,您可以强制项目的来源,标志ItemIgnoresTransformations
位于缩放中心。因此,添加在缩放中心带有标志ItemIgnoresTransformations
的伪QGraphicsItem,并使其成为小部件的父级。很可能您必须将小部件的位置设置为:widget.setPos(widget.width()/2, widget.height()/2)
。
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- QwtPlot具有相等的轴和自动缩放
- 如何在directx/c++中进行平移/缩放操作
- 在Qt中实现无限可缩放的画布
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何在OpenGL(GLFW,很高兴)中进行2D缩放?
- 改变或缩放两个正态分布以具有特定的相关系数
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在OpenGL中正确旋转和缩放对象?
- 仅当类型为 std::complex 时,才进行缩放
- 将 VS Code 用于跨平台可缩放C++项目
- 根据帧速率缩放/缩小数字
- 如何制作可以缩放和绘制的画布QWidget?
- 如何在qWidget.showFullScreen()上自动缩放Qt中的按钮和所有内容
- 缩放QGraphicsView而不缩放已添加到其中的QWidget
- 如何重新缩放图像并将其设置为 QWidget
- 在QScrollArea中对QWidget进行缩放