Qt 什么对象在QML中具有活动焦点?

Qt 什么对象在QML中具有活动焦点?,qt,qml,focus,qtquickcontrols2,Qt,Qml,Focus,Qtquickcontrols2,我有一个使用QML的复杂GUI,但在某些情况下,我失去了我的焦点,我不知道哪个对象具有活动焦点 是否有任何工具或方法可以在QML文件中搜索并找到焦点对象?我使用此行查看哪个项目具有活动焦点: Window { onActiveFocusItemChanged: print("activeFocusItem", activeFocusItem) } 此代码通过打印带有活动焦点的项目来响应窗口属性的更改应用程序窗口来自Qt快速控件,并且具有相同的属性,因为它们源自窗口 要了解项目如何获得

我有一个使用QML的复杂GUI,但在某些情况下,我失去了我的焦点,我不知道哪个对象具有活动焦点


是否有任何工具或方法可以在QML文件中搜索并找到焦点对象?

我使用此行查看哪个项目具有活动焦点:

Window {
    onActiveFocusItemChanged: print("activeFocusItem", activeFocusItem)
}
此代码通过打印带有活动焦点的项目来响应
窗口
属性的更改<代码>应用程序窗口来自Qt快速控件,并且具有相同的属性,因为它们源自
窗口


要了解项目如何获得焦点,可以将
QT\u LOGGING\u RULES
环境变量设置为
QT.quick.focus=true
。这允许记录Qt的内部焦点处理。但是,输出可能有点棘手

由于您使用的是Qt Quick Controls 2,因此值得注意的是,每个控件都有一个属性,用于确定控件如何获得焦点。像
按钮
这样的控件的默认值是
Qt.StrongFocus
,这意味着按钮在被单击或用选项卡插入后获得焦点。如果您看到一个控件有焦点,而您不希望它有焦点,只需将其
focusPolicy
设置为
Qt.NoFocus

focusPolicy: Qt.NoFocus

我找到了我的活动聚焦对象!现在有什么解决方案可以找到焦点发生变化的地方吗?您使用的是Qt Quick Controls 2吗?是的,我使用的是qtquick Controls 2这很有用,但它不解决如何让一行代码找到活动窗口的问题。相反,它要求代码行在所有组件中传播。例如,如果您希望关闭一个窗口作为全局操作的结果,这就是一个问题。有没有关于如何从任何地方抓取活动窗口的想法?@KennSebesta可能是最简单的方法。我认为它没有QML API。