3

次のような QML ファイルがあるとします。

Window {

    Component.onCompleted: rect.color  ="green"

    TabView {
        Tab {
            Rectangle {
                id:  rect
                color: "white"
            }
        }
    }
}

このコードを実行すると、何らかの理由で次のエラーが表示されます。

ReferenceError: rect が定義されていません

スコープの問題だと誰かが言うかもしれませんが、次のコードは正常に動作します:

Window {

    Component.onCompleted: rect.color  ="green"

    Item {
        Item {
            Rectangle {
                id:  rect
                color: "white"
            }
        }
    }
}

私の場合、内部にタブとコントロールを含む大きなフォームがあり、フォームを検証するためにすべてのコントロールをいくつかの関数に渡します。つまり、次のようなコードです。

function onClose() {
    validate(control1);
    validate(control2);
    // etc
}

しかし、コントロールにアクセスしてidいるときに上記のエラーが発生します。

4

2 に答える 2

0

わかりました。Tabアイテムは外部からアクセスできないため、次の方法で実行できると思います。

TabView {
    id: tabView
    Tab {
        title: "tab1"
        function validate() { /* validate all the controls related to tab1 only */ }
        Item { id: item1 }
        Item { id: item2 }
    }
    Tab {
        title: "tab2"
        function validate() { /* validate all the controls related to tab2 only */ }
        Item { id: item3 }
        Item { id: item4 }
    }
    function validateTabs() {
        for(var i = 0; i < tabView.count;i ++) {
            var tab = tabView.getTab(i);
            if(tab && tab.active && tab.item.validate) {
                if(!tab.item.validate())
                    return false;
            }
        }
        return true;
    }
}

Tab一部が開かれていないため変更されていない場合、検証されないという良い点。

于 2015-06-02T23:21:44.110 に答える