为QGraphicsView场景创建永久静态叠加层

时间:2013-04-17 20:36:30

标签: qt overlay qgraphicsview qpixmap paintevent

我正在使用Qt(目前为4.8)制作应用程序,该应用程序显示来自大量QGraphicsScene项目的文字地图。我想用比例注释视图。我对比例的要求是它在视口小部件中永久固定。只要视图比例发生变化(放大等),就需要更新它。还有其他可能的叠加项目(指南针等),所以我更喜欢通用的解决方案。

我已经看过前面有关这个问题的建议:

  • 使用ItemIgnoresTransform
  • 使用叠加像素图。

我尝试了IgnoresTransform,但是这种方式无法正常工作:我无法弄清楚如何在视口的底角(例如)将其固定到位并且在使文本和线始终显示时遇到一些困难正确的尺寸。

我废弃了这个并继承了QGraphicsView,通过重新实现paintEvent(调用原始的,然后在顶部绘制叠加像素图)添加叠加像素图,并使用对齐选项来指示它的去向。编码一些pixmap绘制代码会在视图上生成可用的缩放。好极了! ...但它不适用于卷轴 - 我得到了整个刻度的“破碎”渲染,有时根本没有刻度。我认为这是因为QGraphicsView :: scrollViewportBy()使用了viewport() - > scroll()所以我想知道切换到ViewportSmartUpdate是否有帮助,但它没有用。我不想切换到ViewportFullUpdate,因为这可能会使应用程序放慢太多(场景中有数百万个项目,只需要移动就可以完全重新绘制)。

因此。来自这里的任何想法?是否会调整我的pixmap代码以写入覆盖在视口上的新的大多数透明的Widget是更好的方法?

感谢您的帮助......

1 个答案:

答案 0 :(得分:1)

虽然这可能不是最好的方法,但过去我已经在包含QGraphicsView / QGraphicsScene的窗口中添加了自定义小部件,它们与场景中的QGraphicObjects具有相同的图形样式。当视图用于移动场景中的对象或场景本身时,窗口上的项目保持在同一位置。
希望有所帮助。