Search code examples
qtblackberryqmlblackberry-10

Access properties from different qml tabs within same tabbedpane


I have my main.qml that contains a tabbedpane, in which, it has two tabs: tab1 and tab2. I would like to be able to change the text from one tab to another.

If I do the same with navigationpane it works but not with tabs apparently. Is there any way I could share information between them? I've tried with signals in c++ but it doesn't work either(I guess it doesnt know the instance ?).

Any suggestion is appreciated.

main.qml:

TabbedPane {
Tab {
    Tab1 {
    }
}
Tab {
    Tab2 {
    }
}
attachedObjects: [
    Tab1 {
        id: tab1
    },
    Tab2 {
        id: tab2
    }        
]
}

Tab1.qml:

Page {
property alias labeltab1: labeltab1
Container {
    Label {
        id: labeltab1
        text: "label tab1"
    }
    Button {
        id: buttontab1
        text: "tab1"
        onClicked: {
            tab2.labeltab2.text = "This is coming from tab1"
        }
    }
}
}

Tab2.qml:

Page {
property alias labeltab2: labeltab2
Container {
    Label {
        id: labeltab2
        text: "Label tab2"
    }
    Button {
        id: buttontab2
        text: "tab2"
        onClicked: {
            tab1.labeltab1.text = "This is coming from tab2"
        }
    }
}
}

Solution

  • I guess it's actually simpler with tabs and I found my own solution.

    I noticed that momentics cannot detect that "thepane" is linkable and will not suggest its name when typing it from one of the tab. Also, a property with colon will automatically bind the value afterit, as: text: thepane.mystring

    When clicking on buttons, it changes the value of mystring thus changing both labels texts.

    main.qml

    TabbedPane {
    id: thepane
    property string mystring
    Tab {
        Tab1 {
    
        }
    }
    Tab {
        Tab2 {
    
        }
    }
    }
    

    Tab1.qml

    Page {
    Container {
        Label {
            id: labeltab1
            text: thepane.mystring
        }
        Button {
            id: buttontab1
            text: "tab1"
            onClicked: {
                thepane.mystring = "This is coming form tab1"
            }
        }
    }
    }
    

    Tab2.qml

    Page {
    Container {
        Label {
            id: labeltab2
            text: thepane.mystring
        }
        Button {
            id: buttontab2
            text: "tab2"
            onClicked: {
                thepane.mystring = "This is coming from tab2"
            }
        }
    }
    }