2017-04-18 2 views
2

Ich mache einen Snapshot (über einen ShaderEffectSource mit live: false) eines Items, aber ich bekomme manchmal (1 Fälle in 200) einen leeren Snapshot. Ich mache den Schnappschuss basierend auf einem Signal wie folgt:Kann ich benachrichtigt werden, wenn ein Artikel mit der Neulackierung fertig ist?

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

Dies ist nur als Gesamtzusammenhang. Ich werde jetzt keinen Testfall veröffentlichen, weil es eine große App ist und ich noch keinen Testfall isoliert habe. Das könnte für eine zukünftige Frage von Bedeutung sein.

Also frage ich nicht "wo ist der Fehler in meinem Code" noch. Stattdessen habe ich eine einfache Frage, die mir helfen kann, den Fehler zu beheben:

Kann ich benachrichtigt werden, wenn ein Artikel fertig ist, neu zu streichen?

Begründung: Vielleicht, wenn ich status == Image.Ready bekommen, hat das Bild nur geladen und noch nicht die geladenen Daten in die Off-Screen-Oberfläche gemalt. Also, wenn mein gewünschtes Signal existiert, könnte ich auf es haken, anstatt auf Image.statusChanged zu haken.

Hinweis: Ich konnte meine eigene NotifyingImage Komponente implementieren, wie Image arbeitet, sondern zusätzlich belichtet ein repainted Signal. Aber ich würde gerne wissen, ob es einen eingebauten Weg gibt.

In Verbindung stehende Frage: "Get notified when QQuickItem will need updating". Aber dort ist der Fragesteller zufrieden mit dem Wissen, wenn der Artikel Daten aktualisiert wird, und ich frage nach einem repainted Signal, das ist etwas, das passiert später als was er verlangt.

Antwort

2

Soweit ich weiß ist ein Window immer als Ganzes gerendert. Sie könnten also das Signal Window verwenden.

Der Nachteil: Es wird ausgelöst, wenn sich jemals etwas im Fenster geändert hat. Aber kombiniert mit der (status == Image.Ready) könnte es für Sie arbeiten.

EDIT:
In einem blog post, announcing the release of Qt5.8 der Qt Unternehmen CTO schrieb:

Außerdem nun die Szenengraph unterstützt partielles Updates auf den Bildschirm, wenn nur einen kleinen Bereich der Szenografie geändert. Dies bringt dem Qt Quick 2D-Renderer einige größere Leistungsverbesserungen.

Ich weiß nicht, die Details der Implementierung des Signals afterRendering, so kann ich nicht sagen, ob dies nach einer solchen teilweise Aktualisierung ausgelöst wird und wenn ja, wie zu sagen, ob diese teilweise Aktualisierung besorgt darüber, dass Teil, Sie sind interessiert.

+0

Das funktioniert und macht ziemlich viel Sinn. Ich habe Vorbehalte dagegen, aber da es so gut funktioniert, werde ich es so lange belassen, bis es vielleicht wieder bricht. Danke für die Hilfe zu meinen "qt" Fragen :) –

+0

Gern geschehen! Ihre Fragen sind immer eine lustige und interessante Herausforderung :-) – derM

Verwandte Themen