我正在开发一个桌面应用程序,它使用带有大量QML组件的QML GUI。 这些是层次结构的一部分:
main -> toolbar -> searchbar -> editfield
和
main -> resultlist -> header -> button1
我找不到在button1的信号处理程序中访问editfield的文本内容的方法。是否可以在QML或Javascript中执行此操作?
我知道我可以使用objectName属性访问C ++部分中的元素。
答案 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访问此属性。