qt - QML 中有哪些对象具有 Active Focus?

标签 qt qml focus qtquickcontrols2

我有一个带有 QML 的复杂 GUI,但在某些情况下我丢失了 焦点我不知道哪个对象具有主动焦点。

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

最佳答案

我使用这一行来查看哪个项目具有事件焦点:

Window {
    onActiveFocusItemChanged: print("activeFocusItem", activeFocusItem)
}

此代码响应 activeFocusItem 中的更改Window 的属性(property)通过打印具有事件焦点的项目。 ApplicationWindow来自 Qt 快速控制 12具有相同的属性,因为它们源自 Window .

要了解项目如何获得焦点,您可以设置 QT_LOGGING_RULES环境变量到 qt.quick.focus = true .这为 Qt 的内部焦点处理启用日志记录。虽然输出可能有点棘手。

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

关于qt - QML 中有哪些对象具有 Active Focus?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47960622/

相关文章:

c++ - 有没有办法在保存文件时设置qfiledialog的默认文件名

html - 第二次单击时,Bootstrap 折叠菜单切换不会取消焦点

javascript - 如何在 jQuery 中使用模糊?

qt - 如何动态更新矩形的渐变?

c++ - undefined reference 错误

python - PyQt:在图表中抓取 mouseMoveEvent

qt - 如何通过将事件发布到 Qt 事件系统来模拟鼠标点击?

c++ - 定义QML信号参数类型时出现意外的 `:' token

android - 将焦点限制在具有多个添加 fragment 的容器中的一个 fragment

c++ - 在我的 Qt 应用程序中收到 WM_DEVICECHANGE 但没有收到 DBT_DEVICEARRIVAL