什么对象在 QML 中具有活动焦点?
What Object has Active Focus in QML?
我有一个带有 QML 的复杂 GUI,但在某些情况下我失去了我的 焦点,我不知道哪个对象有活动焦点。
是否有任何工具或方法可以在 QML 文件中搜索并找到焦点对象?
我使用这一行来查看哪个项目具有活动焦点:
Window {
onActiveFocusItemChanged: print("activeFocusItem", activeFocusItem)
}
此代码响应 activeFocusItem
property of Window
by printing out the item with active focus. ApplicationWindow
from Qt Quick Controls 1 and 2 中的更改具有相同的 属性,因为它们派生自 Window
。
要找出如何 一个项目获得焦点,您可以将 QT_LOGGING_RULES
环境变量设置为 qt.quick.focus = true
。这为 Qt 的内部焦点处理启用了日志记录。虽然输出可能有点棘手..
由于您使用的是 Qt Quick Controls 2,因此值得注意的是每个控件都有一个 focusPolicy
属性 来确定控件如何获得焦点。 Button
等控件的默认值为 Qt.StrongFocus
,这意味着按钮在被单击或跳入后获得焦点。如果您发现某个控件有焦点但您不希望它有焦点,只需将其 focusPolicy
设置为 Qt.NoFocus
:
focusPolicy: Qt.NoFocus
我有一个带有 QML 的复杂 GUI,但在某些情况下我失去了我的 焦点,我不知道哪个对象有活动焦点。
是否有任何工具或方法可以在 QML 文件中搜索并找到焦点对象?
我使用这一行来查看哪个项目具有活动焦点:
Window {
onActiveFocusItemChanged: print("activeFocusItem", activeFocusItem)
}
此代码响应 activeFocusItem
property of Window
by printing out the item with active focus. ApplicationWindow
from Qt Quick Controls 1 and 2 中的更改具有相同的 属性,因为它们派生自 Window
。
要找出如何 一个项目获得焦点,您可以将 QT_LOGGING_RULES
环境变量设置为 qt.quick.focus = true
。这为 Qt 的内部焦点处理启用了日志记录。虽然输出可能有点棘手..
由于您使用的是 Qt Quick Controls 2,因此值得注意的是每个控件都有一个 focusPolicy
属性 来确定控件如何获得焦点。 Button
等控件的默认值为 Qt.StrongFocus
,这意味着按钮在被单击或跳入后获得焦点。如果您发现某个控件有焦点但您不希望它有焦点,只需将其 focusPolicy
设置为 Qt.NoFocus
:
focusPolicy: Qt.NoFocus