在一个深层嵌套的QML GUI内,是否有一种简单的方法来查找某项的子项或子项是否具有activeFocus == true
?
Item {
id: intermediateItem
visible: anyDescendantHasActiveFocus(intermediateItem) ? true : false
Item {
Item {
Item {
id: hasActiveFocus
Component.onCompleted: hasActiveFocus.forceActiveFocus()
}
}
}
}
答案 0 :(得分:1)
您可以从当前的activeFocusItem
上进行升级,而不是从基本祖先那里钻取层次结构:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
ApplicationWindow {
id: window
visible: true
width: 640
height: 480
function anyDescendantHasActiveFocus(ancestor) {
let item = ancestor.Window.activeFocusItem;
while (item) {
if (item === ancestor)
return true;
item = item.parent;
}
return false;
}
Row {
anchors.centerIn: parent
spacing: 10
Repeater {
model: 3
Rectangle {
width: 200
height: 100
border.width: 1
border.color: anyDescendantHasActiveFocus(this) ? "red" : "black"
Rectangle {
anchors.fill: parent; anchors.margins: 10
border.width: 1
Rectangle {
anchors.fill: parent; anchors.margins: 10
border.width: 1
Rectangle {
anchors.fill: parent; anchors.margins: 10
border.width: 1
Button {
anchors.centerIn: parent
text: "Focus me"
}
}
}
}
}
}
}
}