私たちはQTクロスプラットフォームアプリケーションを開発しています。アプリケーションには多くの機能的な画面とナビゲーションがあります。スクリーンの取り扱いを簡単にするため、QT QML StackViewを使用しています。 StackView
にプッシュされた各アイテムはPageです。私は次の機能を使って画面をプッシュしポップしています。QT StackViewにコンポーネントを配置する
stackview.push(someurl); //push new url
stackview.pop(); //pop current URL or page
私の質問は、既にスタックにプッシュされているコンポーネント/ページを再利用する方法ですか?
例:次の画面A、B、C、Dがあります。スタックはA-> B-> C-> Dのように見えます。ここで画面Dから私は画面Aにナビゲートしたい。アプリケーションの統一されたアーキテクチャのため、私は3回0,をやりたいとは思っていない。代わりに、アプリケーションは既にスクリーンAを押して、それを一番上に持ってくるべきである。
画面AをStackView
(A-> B-> C-> D-> A)にプッシュするだけで、各画面に異なる信号/スロットを接続しています。画面がプッシュされるたびに接続し、またアプリケーションを成長させたくないStackView
サイズ。
この場合、どのような方法を使用するのが最適でしょうか?他のQTコンポーネント/コントロールは、私がこのページでインデックスに基づいてページをレンダリングできるように使用できますか?
コンポーネントを事前にqml Propertyとして作成してURLに応じてプッシュしました。サンプルアプリケーションでうまくいくと便利です。私たちのアプリケーションでは、QMLコンポーネントのデータはC++データ(または実行時のいくつかの計算)に密接に依存しています。事前にコンポーネントを作成すると、アプリケーションがクラッシュする原因となります。だから私たちはそのアプローチを使用するつもりはありません。
property Page page1: Screen1{} //Screen1.qml
property Page page2: Screen2{} //Screen2.qml
property Page page3: Screen3{} //Screen3.qml
property Page page4: Screen4{} //Screen4.qml
Indexに基づいてStackviewコンポーネントを実行することは可能ですか?ドキュメントに関連するものは何も見つかりません。
'StackView'はスタックで、スタック上に、あなたは常に岩下ものをプッシュすると、あなたがしたい場合はダウンあなたの自己を働きます下位層で何かを見つける。この振る舞いを望まないなら、 'StackView'を使うべきではありません。そのための独自のコンテナを簡単に構築することができます。たとえば、作成したアイテムを 'ObjectModel'にプッシュし、正しいインデックスを持つものだけを表示します。 – derM
最初は@derMが正しい。読み込まれたページを切り替える場合は、StackViewが最適な選択肢ではありません。しかし、ページをロードしてアンロードする必要がある場合は、 pop()を3回以上呼び出すのではなく、pop - > pop(ScreenA)の引数としてポップする項目を指定するだけで、すべての項目が削除されます。 – Xplatforms