メインアプリケーションストリームの外部でアニメーションを実行すると、通常はメインストリームがブロックされてアニメーションの遅延が発生する、リソース集中型のタスクがアニメーションに与える影響を大幅に削減できるという利点があります。
アニメーションを別のストリームに移動できない主な問題が3つあります。
- プロパティが変更されると、アニメーションが更新されます。 プロパティはQObjectとメタオブジェクトシステムの一部です。 スレッドの狂気を避けるために、GUIスレッドでこれらのプロパティを読み書きすることのみが許可されています。
- プロパティは、特定のイベントが発生したときにJavaScriptコードをトリガーするQMLのバインディングとリレーションシップを持っていることが多く、これもGUIスレッドで実行する必要があります。
- QtQuickライブラリのレンダリングサイクルはGUIスレッドに関連付けられているため、このスレッドがブロックされると、アニメーションは更新されません。
以前の投稿で書いたように、 このパッチは3番目の問題を修正しますが、QObjectへのアクセスとJavaScriptの一時停止の問題を未解決のままにしています。
私の同僚であるMarkoNiemeläは、QObject / QML通信の問題を解決するアニメーションシステムに取り組んでいます。 animationsプロパティでの彼の作品は、遊び場のサンドボックスにあります。
これはQt 5.0の機能ではありませんが、Qt 5.1で見ることができます。
お楽しみください!