物品完成重新绘制后是否可以收到通知?

时间:2017-04-18 18:00:47

标签: qt events qml qtquick2 repaint

我正在制作快照(通过带有ShaderEffectSource的{​​{1}})项目,但我有时(200个案例中有1个)获得空白快照。我根据这样的信号制作快照:

live: false

这只是一个整体背景。我暂时不会发布测试用例,因为它是一个很棒的应用程序而我还没有分离出一个测试用例。这对未来的问题可能是重要的。

所以我不会问我的代码中的错误""然而。相反,我有一个简单的问题,我认为可以帮助我修复错误:

项目完成重新绘制后是否可以收到通知?

理由:也许当我得到Image { onStatusChanged: { if (status == Image.Ready) { snapshotter.makeSnapshot(); } } } 时,图片只有已加载,并且尚未将加载的数据绘制到屏幕外表面。因此,如果我想要的信号存在,我可以挂钩而不是挂钩status == Image.Ready

注意:我可以实现自己的Image.statusChanged组件,其工作方式与NotifyingImage类似,但另外还会公开Image信号。但我想知道是否有内置方式。

相关问题:" Get notified when QQuickItem will need updating"。但是,提问者对知道项目数据何时更新感到满意,并且我在询问repainted信号,这是以后发生的事情比他要求的要多。

1 个答案:

答案 0 :(得分:2)

据我所知,Window总是作为一个整体呈现。因此,您可以使用Window' afterRendering信号。

缺点:当窗口中的任何东西发生变化时,它将被触发。但结合(status == Image.Ready)它可能适合你。

修改
blog post, announcing the release of Qt5.8 Qt Companies CTO 中写道:

  

此外,如果场景的一小部分区域发生变化,则场景图现在支持部分更新到屏幕。这为Qt Quick 2D渲染器带来了一些更大的性能改进。

我不知道信号afterRendering的实施细节,因此我无法判断这是否是在部分更新之后触发的,如果是,该如何判断,部分更新是否与您感兴趣的部分有关。