Функция вызова или свойство в другом файле QML внутри TabView в QML

Я хочу позвонить myFunc() в PageA.qml из main.qml (см. событие onClicked в Button). Я пробовал некоторые вещи с псевдонимами свойств, но пока ничего не сработало. Любые идеи?

Вот мой код PageA.qml:

import QtQuick 2.4
import QtQuick.Controls 1.2

Item {
    function myFunc() { /* ... */ }
    TextField { id: myText }
}

А вот мой main.qml:

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2

ApplicationWindow {
    width: 640
    height: 480
    visible: true

    TabView {
        Tab {
            title: "Tab A"
            PageA { }
        }
        // ...
    }
    Button {
        text: "click"
        onClicked: callMyFunc()
    }

    function callMyFunc() {
        // Call myFunc() in PageA.qml or read property "text" of the TextField
    }
}

person jochen    schedule 17.04.2015    source источник


Ответы (1)


Ваша проблема с вызовом функции в PageA связана с тем, что Tab наследуется не от Item, а от Loader, поэтому прямой вызов функции, такой как tabID.function(), невозможен. Вам нужно свойство item Tab:

TabView {
    Tab {
        id: tabA // Give the tab an id
        title: "Tab A"
        PageA { }
    }
    // ...
}
Button {
    text: "click"
    onClicked: callMyFunc()
}

function callMyFunc() {
    tabA.item.myFunc() // Call the function myFunc() in PageA
}

В качестве альтернативы вы можете создать псевдоним:

TabView {
    id: mytabview
    property alias tabItem : tabA.item
    Tab {
        id: tabA // Give the tab an id
        title: "Tab A"
        PageA { }
    }
    // ...
}
Button {
    text: "click"
    onClicked: callMyFunc()
}

function callMyFunc() {
    mytabview.tabItem.myFunc() // Call the function myFunc() in PageA
}

Но псевдоним или не псевдоним - это более или менее косметический выбор.

person Greenflow    schedule 18.04.2015
comment
Спасибо! Я забыл .item при вызове функции. - person jochen; 18.04.2015