
何かが足りないのかもしれませんが、ページ 2 が読み込まれる前にコードが実行されている理由がわかりません。
http://pastebin.ubuntu.com/8068379/
また、ボタンが押される前にページ 2 内の関数とコードが実行されないようにする方法はありますか?
答え1
Component.onCompleted
インタープリタが QML ファイルを読み取り、それをオブジェクトに解析するとすぐに実行されます。この時点で「ページ 2」オブジェクトが作成されますが、表示されませんvisible: false
。コードの実行が妨げられることはありませんonCompleted
。
ページがスタックにプッシュされたときにのみコードを実行する方法は 3 つあります。
pageStack.push()
実行したい他のコードを呼び出してトリガーするカスタム関数を作成します。onCompleted
ページ 2 のハンドラーからハンドラーにコードを移動しますonVisibleChanged
。これは、ページがスタックからプッシュされたときとポップされたときの両方で呼び出されることに注意してください。どちらが起こっているかを確認するには、 の値を確認してくださいvisible
。ページ 2 オブジェクトを別のファイル (たとえば「page2.qml」) に移動し、プッシュ呼び出しを に変更します
pageStack.push(Qt.resolvedUrl("page2.qml"))
。これにより、スタックにプッシュされるたびに新しいページ 2 オブジェクトが作成されます。これは、希望どおりの結果である場合もあれば、そうでない場合もあります。
これら3つは、ページ2がスタックにプッシュされるたびにコードを呼び出すことに注意してください。最初の1回だけ呼び出されるようにしたい場合は、自分で追跡する必要があります。オブジェクトの作成がページスタックとどのように相互作用するかの詳細については、この答え。