我正在开发一个桌面应用程序,它使用带有大量 QML 组件的 QML GUI。这些是层次结构的一部分:
main -> toolbar -> searchbar -> editfield
和
main -> resultlist -> header -> button1
我找不到在 button1 的信号处理程序中访问编辑字段文本内容的方法。是否可以在 QML 或 Javascript 中做到这一点?
我知道我可以使用 objectName 属性访问 C++ 部分中的元素。
由于 QML 使用动态范围(→ Doc),子元素可以访问所有祖先的属性,并且它们是否在不同的文件中并不重要。
因此,您可以将editFieldText
属性添加到 main 并将
text
editfield 的属性绑定到它。然后你可以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);
}
}
}
您可以使用别名属性将 editfield.text 作为 main 的属性。应该可以从 button1 访问此属性。