导航和寻址QMLComponents

时间:2011-04-07 08:23:21

标签: qt qml

我正在开发一个桌面应用程序,它使用带有大量QML组件的QML GUI。 这些是层次结构的一部分:

main -> toolbar -> searchbar -> editfield

main -> resultlist -> header -> button1

我找不到在button1的信号处理程序中访问editfield的文本内容的方法。是否可以在QML或Javascript中执行此操作?

我知道我可以使用objectName属性访问C ++部分中的元素。

2 个答案:

答案 0 :(得分:3)

由于QML使用动态范围(→ Doc),子元素可以访问所有祖先的属性 如果它们位于不同的文件中则无关紧要。

因此,您可以向main添加editFieldText属性并绑定 编辑域的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);
        }
    }
}

答案 1 :(得分:1)

您可以使用别名属性将editfield.text作为main的属性。可以从button1访问此属性。