我已经将 QGraphicsView 子类化为具有一些使其放大和缩小的滚轮事件。当滚轮滚动时,调用缩放 GraphicsView 的缩放功能
if(zoom_in)
{
factor = 2.0;
}
else
{
factor = 0.5;
}
this->scale(factor, factor);
这工作正常并缩放设置为图形 View 的场景中的项目(这是我想要的功能)。
但是我也有一个 QWidget 添加到这个场景。该小部件基本上应该是 QGraphicsView 的背景,无论何时调整 View 大小时,它都具有相同的尺寸和大小以适应 View 。
我知道你可以设置忽略翻译并且已经这样做了
proxyWidget = this->scene()->addWidget(myBackgroundWidget);
proxyWidget->setFlag(QGraphicsItem::ItemIgnoresTransformations);
所以当 View 被缩放时,小部件不会改变大小,这是正确的,但它确实会因为某种原因移动,它在放大时向上和向左移动,在缩小时向右移动。
我根本不明白为什么会发生这种情况,因为如果只是删除 ItemIgnoresTransformations
标志并放大和缩小它会完美地保持在屏幕中央但会改变大小,这显然不是我想要的想要
如果有人能对此有所了解,我将不胜感激
最佳答案
其实你观察到的是正常的。如果您不缩放该项目,它将“看起来”在平移,因为所有图形 View 都已缩放。
实现您的目标的一种方法可能是定义一个根 QGraphicsItem,您的小部件是它的父级。在根项目的边界矩形的功能中,您只需将静态小部件重新置于其中以避免这种翻译印象。
关于c++ - 缩放 QGraphicsView 而不缩放已添加到其中的 QWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21043463/