调用 PageStack 中上一个 Page 中的 python 函数
Call to a python function in the previous Page in the PageStack
我有 2 个 QML Silica 页面,Main.qml 和 Icon.qml。
Main.qml 有这样的分布:
import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3
Page {
SilicaFlickable {
id: mainList
Button {
text: "Stack the next page"
onClicked: { // Stack de Icon Page
pageStack.push(Qt.resolvedUrl("Icon.qml"))
}
}
function reload(){ }
Python {
id: py
Component.onCompleted: { mainList.reload() }
}
}
}
我想调用函数 reload()
因为 Icon:
import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3
Page {
id: iconEditor
Button {
onClicked: {
pageStack.pop()
pageStack.completeAnimation()
pageStack.currentPage.mainList.reload() // Fail
}
}
}
Main.qml 页面在主要 QML 文件中堆叠如下:
import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3
ApplicationWindow {
id: root
Python {
Component.onCompleted: {
pageStack.push(Qt.resolvedUrl("Main.qml"))
}
}
}
如何调用堆栈上一页的函数?
“id”只有定义它的 .qml 作为范围,不能(或应该在该范围之外使用)。如果你想公开对象或变量,那么你必须通过在文件的顶层创建一个 属性 来实现。
在这种情况下,解决方案是使用 alias property:
import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3
Page {
property alias mainList: mainList
SilicaFlickable {
id: mainList
// ...
我有 2 个 QML Silica 页面,Main.qml 和 Icon.qml。
Main.qml 有这样的分布:
import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3
Page {
SilicaFlickable {
id: mainList
Button {
text: "Stack the next page"
onClicked: { // Stack de Icon Page
pageStack.push(Qt.resolvedUrl("Icon.qml"))
}
}
function reload(){ }
Python {
id: py
Component.onCompleted: { mainList.reload() }
}
}
}
我想调用函数 reload()
因为 Icon:
import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3
Page {
id: iconEditor
Button {
onClicked: {
pageStack.pop()
pageStack.completeAnimation()
pageStack.currentPage.mainList.reload() // Fail
}
}
}
Main.qml 页面在主要 QML 文件中堆叠如下:
import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3
ApplicationWindow {
id: root
Python {
Component.onCompleted: {
pageStack.push(Qt.resolvedUrl("Main.qml"))
}
}
}
如何调用堆栈上一页的函数?
“id”只有定义它的 .qml 作为范围,不能(或应该在该范围之外使用)。如果你想公开对象或变量,那么你必须通过在文件的顶层创建一个 属性 来实现。
在这种情况下,解决方案是使用 alias property:
import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3
Page {
property alias mainList: mainList
SilicaFlickable {
id: mainList
// ...