修复了 QGraphicsView 中的变换叠加

dat*_*olf 4 overlay transform qt4 qgraphicsview qgraphicsscene

在我正在开发的基于 Qt 的应用程序中,我使用 QGraphicsView 在 2D 网格中显示传感器数据。在侧面,我想显示一个图例/调色板,将网格中的颜色与值相关联。

用户可以缩放和平移传感器数据视图,但可以理解的是,调色板应该在视图中固定。因此,将调色板/图例放置在传感器视图场景中需要一些额外的注意:应用逆用户变换。

不过,我宁愿将调色板/图例实现为一种(非交互式)覆盖层,并具有自己的转换。这有可能吗?

Jer*_*ner 5

这是一种获取浮动图例(或等)的非常简单的方法,我在 Qt 4.8.5 和 Qt 5.2.1 下测试了它:

  1. 子类 QGraphicsView
  2. 在您的子类中,为drawForeground(QPainter *, const QRectF &) 方法添加一个重写方法
  3. 在您的覆盖方法中,在绘制任何内容之前调用painter->resetTransform()
  4. 使用 QPainter 在视图顶部绘制图形,就像使用任何其他 QWidget 一样

这很有效——特别是,使用这种方法,您不必计算任何逆坐标变换或更改视图的更新模式。