
Возможно, я что-то упускаю, но я не уверен, почему код выполняется до загрузки страницы 2.
http://pastebin.ubuntu.com/8068379/
И есть ли способ предотвратить запуск функций и кода на странице 2 до нажатия кнопки?
решение1
Component.onCompleted
запускается, как только интерпретатор прочитал файл QML и разобрал его на объекты. Ваш объект "страница 2" создан в это время, но он создан, visible: false
поэтому вы его не видите. Это не мешает onCompleted
коду работать.
Я знаю три способа заставить код выполняться только тогда, когда страница помещается в стек:
Создайте пользовательскую функцию, которая вызывает
pageStack.push()
и запускает любой другой код, который вы хотите выполнить.Переместите код из
onCompleted
обработчика страницы 2 вonVisibleChanged
обработчик. Обратите внимание, что это будет вызвано как при добавлении страницы в стек, так и при ее извлечении из стека; проверьте значение ,visible
чтобы узнать, что происходит.Переместите объект страницы 2 в отдельный файл, скажем, "page2.qml", и измените вызов push на
pageStack.push(Qt.resolvedUrl("page2.qml"))
. Это будет создавать новый объект страницы 2 каждый раз, когда он будет помещаться в стек; это может быть, а может и не быть тем, что вам нужно.
Обратите внимание, что все три из них будут вызывать код каждый раз, когда страница 2 помещается в стек. Если вы хотите, чтобы он был вызван только в первый раз, вам придется отслеживать это самостоятельно. Для получения дополнительной информации о том, как создание объекта взаимодействует с pageStack, ознакомьтесь сэтот ответ.