2

多くのQMLコンポーネントを備えたQMLGUIを使用するデスクトップアプリケーションに取り組んでいます。これらは階層の一部です。

main -> toolbar -> searchbar -> editfield

main -> resultlist -> header -> button1

button1のシグナルハンドラーでeditfieldのテキストコンテンツにアクセスする方法が見つかりませんでした。QMLまたはJavascriptでそれを行うことは可能ですか?

objectNameプロパティを使用して、C++部分の要素にアクセスできることはわかっています。

4

2 に答える 2

3

QMLは動的スコープ(→Doc)を使用するため、子要素はすべての祖先のプロパティにアクセスでき、それらが異なるファイルにあるかどうかは関係ありません。

したがって、mainにプロパティを追加し、editfieldeditFieldTextのプロパティをそれにバインドする ことができます。text次にeditFieldText 、どこからでもアクセスできます。

//=== main.qml ===
import QtQuick 1.0

Rectangle {
    id: main

    property string editFieldText

    Toolbar {
        // [...]
    }

    Resultlist {
        // [...]
    }
}


//=== EditField.qml ===
import QtQuick 1.0

TextInput {
    // bind text property to main.editFieldText
    Binding {
        target: main;
        property: "editFieldText";
        value: text
    }
}


//=== Header.qml ===
import QtQuick 1.0

Rectangle {
    Button {
        onClick: {
            console.log(main.editFieldText);
            // or simply
            console.log(editFieldText);
        }
    }
}
于 2011-04-10T16:46:50.863 に答える
1

エイリアスプロパティを使用して、editfield.textをmainのプロパティとして使用できます。このプロパティには、button1からアクセスできる必要があります。

于 2011-04-07T22:24:24.593 に答える