>在深度嵌套的QML GUI中,有没有一种简单的方法可以找出项目的任何子项或孙子等是否有activeFocus == true
?
Item {
id: intermediateItem
visible: anyDescendantHasActiveFocus(intermediateItem) ? true : false
Item {
Item {
Item {
id: hasActiveFocus
Component.onCompleted: hasActiveFocus.forceActiveFocus()
}
}
}
}
您可以从当前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"
}
}
}
}
}
}
}
}