2017-04-18 31 views
2

我正在拍攝一個項目的快照(通過ShaderEffectSourcelive: false),但我有時(200箇中的1個)獲得空白快照。我正在根據這樣的信號拍攝快照:物品完成重新粉刷後,我可以收到通知嗎?

Image { 
    onStatusChanged: { 
     if (status == Image.Ready) { 
      snapshotter.makeSnapshot(); 
     } 
    } 
} 

這只是一個整體上下文。我現在不會發布測試用例,因爲它是一個很大的應用程序,我還沒有隔離測試用例。這對未來的問題可能是重要的。

所以我不問「我的代碼中的錯誤在哪裏」。相反,我有一個簡單的問題,我認爲可以幫助我解決這個問題:

當物品完成重新粉刷後,我可以收到通知嗎?

理由:也許當我得到status == Image.Ready,圖像僅具有加載,還沒有畫的加載數據到屏幕外表面。所以如果我想要的信號存在,我可以掛接到而不是掛在Image.statusChanged上。

注:我可以實現我自己的NotifyingImage組件,它的工作原理是Image但還暴露了一個repainted信號。但我想知道是否有內置的方式。

相關問題:Get notified when QQuickItem will need updating」。但是那裏的提問者知道什麼時候數據被更新,並且我詢問repainted信號,這是發生在後面比他要求的東西。

回答

2

據我所知,Window總是呈現爲一個整體。所以你可以使用WindowafterRendering信號。

不足之處:當窗口中的任何事物發生變化時,它將被觸發。但結合(status == Image.Ready)它可能適合你。

編輯:
blog post, announcing the release of Qt5.8Qt的公司CTO寫道:

此外,場景圖現在支持部分更新到屏幕上如果只有舞臺佈景的小面積改變。這爲Qt Quick 2D渲染器帶來了一些更大的性能改進。

我不知道信號afterRendering的實現細節,所以我不能說這是否是這樣的部分更新後觸發,如果是的話,如何分辨,是否關注的是,該部分更新部分,你有興趣。

+0

這工作,並使相當多的意義。我對此有一些保留,但由於它工作得很好,我會留下來,直到它可能再次打破。感謝所有關於我的「qt」問題的幫助:) –

+0

不客氣!你的問題總是一個有趣而有趣的挑戰:-) – derM

相關問題