![如何阻止 PageStack 中的第二页运行?](https://linux22.com/image/1047523/%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%20PageStack%20%E4%B8%AD%E7%9A%84%E7%AC%AC%E4%BA%8C%E9%A1%B5%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我可能在这里遗漏了一些东西,但我不确定为什么在第 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 交互的更多信息,请查看这个答案。