c++ - 缩放 QGraphicsView 而不缩放已添加到其中的 QWidget

标签 c++ qt zooming scale qgraphicsview

我已经将 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/

相关文章:

c++ - Qt槽没有激活

javascript - 如何检测缩放级别的变化?

c# - 在c#项目中导入c++ dll

c++ - 在 IAR 的 C++ 编译器中使用 Boost

c++ - Qt 中简单的无键盘触摸屏小部件

c++ - 移动 QMessageBox?

html - 禁用智能手机的缩放

matlab - 为什么缩放标记会改变位置?

c++ - 为什么重建后的 map 类型与原始 map 类型不同?

c++ - Unix:如何清除串口I/O缓冲区?