Call to a python function in the previous Page in the PageStack

111 views Asked by At

I have 2 QML Silica Pages, Main.qml and Icon.qml.
Main.qml has this distribution:

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() }
        }
    }
}

And I want to call the function reload() since 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
        }
    }
}

The Main.qml Page is stacked in the principal QML file like this:

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"))
        }
    }
}

How can I call the function on the previous page of the stack?

1

There are 1 answers

1
eyllanesc On BEST ANSWER

The "id" have as scope only the .qml where it was defined and cannot (or should be used outside of that scope). If you want to expose objects or variables then you must do it by creating a property in the toplevel of the file.

In this case a solution is to use an 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
        // ...