1

我有 2 个 QML 二氧化硅页面,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"))
        }
    }
}

如何调用堆栈上一页的函数?

4

1 回答 1

1

“id”仅具有定义它的 .qml 作为范围,并且不能(或应该在该范围之外使用)。如果要公开对象或变量,则必须通过在文件的顶层创建属性来实现。

在这种情况下,解决方案是使用别名属性

import QtQuick 2.0
import Sailfish.Silica 1.0
import io.thp.pyotherside 1.3

Page {
    property alias mainList: mainList

    SilicaFlickable {
        id: mainList
        // ...
于 2021-05-16T20:48:57.803 回答