在基于Qt的应用程序中,我正在开发我正在使用QGraphicsView在2D网格中显示传感器数据。在侧面,我想展示一个图例/调色板,将网格中的颜色与值相关联。
用户可以缩放和平移传感器数据视图,但可以理解的是,调色板在视图中应该是静止的。因此,将调色板/图例放在传感器视图场景中需要额外注意:应用逆用户转换。
然而,我宁愿将调色板/图例实现为一种(非交互式)覆盖层,它具有非常自己的转换。这有可能吗?
答案 0 :(得分:2)
我认为你应该在QGraphics上下文中实现你的图例/调色板叠加,如果你移动(setPosition ...)这个项目以反转用户转换你随时会在图形树中重新索引项目平移/缩放......
做一个覆盖小部件肯定是可行的,但在这种情况下,因为它是你图形上下文的一部分,我建议你实现自己的QGraphicsView
(wicth是一个小部件)重新实现paintEvent
到在默认小部件空间中绘制调色板/图例(无转换)。此外,如果您的调色板/图例是静态的,您可以在像素图中渲染一次,只需在QGraphicsView
需要更新时重新绘制此缓冲区像素图(当然,重新调整大小将需要更新缓冲区...)。
如果你不担心不相互作用的部分,你甚至不必转发事件。
答案 1 :(得分:2)
这是获得浮动图例(或其他)的一种非常简单的方法,我在Qt 4.8.5和Qt 5.2.1下进行了测试:
这很有效 - 特别是,使用这种方法,您不必计算任何反向坐标转换或更改视图的更新模式。
答案 2 :(得分:1)
也许我误解了你想要达到的目标,但你可以用QGraphicsItem :: Item Ignores Transformations标记QGraphicsItem标记,这样你就不需要对它进行逆变换了。