
我可能在這裡遺漏了一些東西,但我不確定為什麼程式碼在第 2 頁應該加載之前運行。
http://pastebin.ubuntu.com/8068379/
有什麼方法可以阻止第 2 頁中的函數和程式碼在按下按鈕之前運行嗎?
答案1
Component.onCompleted
解釋器讀取 QML 檔案並將其解析為物件後立即運行。此時您的「第 2 頁」物件已創建,但它已創建,visible: false
因此您看不到它。這不會阻止onCompleted
程式碼運行。
我知道三種方法可以讓程式碼僅在頁面被推入堆疊時運行:
建立一個自訂函數來呼叫
pageStack.push()
並觸發您想要運行的任何其他程式碼。將程式碼從第 2 頁的
onCompleted
處理程序移至該onVisibleChanged
處理程序。請注意,當頁面被壓入堆疊或從堆疊彈出時,都會呼叫此函數。檢查 的值visible
來判斷發生了什麼事。將第 2 頁物件移至一個單獨的檔案中,例如“page2.qml”,並將推送呼叫變更為
pageStack.push(Qt.resolvedUrl("page2.qml"))
.每次將其推入堆疊時,都會建立一個新的第 2 頁物件;這可能是也可能不是您想要的。
請注意,每次將第 2 頁推送到堆疊時,所有這三個都會呼叫程式碼。如果您只想第一次呼叫它,則必須自己追蹤它。有關物件建立如何與 pageStack 互動的更多信息,請查看這個答案。