我可能在这里遗漏了一些东西,但我不确定为什么在第 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 交互的更多信息,请查看这个答案。