2

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

main -> toolbar -> searchbar -> editfield

main -> resultlist -> header -> button1

我找不到在 button1 的信号处理程序中访问编辑字段文本内容的方法。是否可以在 QML 或 Javascript 中做到这一点?

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

4

2 回答 2

3

由于 QML 使用动态范围(→ Doc),子元素可以访问所有祖先的属性,并且它们是否在不同的文件中并不重要。

因此,您可以将editFieldText属性添加到 main 并将 texteditfield 的属性绑定到它。然后你可以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 回答