检查后代在 QML 中是否具有 activeFocus == true



>在深度嵌套的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"
                            }
                        }
                    }
                }
            }
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新