QML的focus与activeFocus
概念
在 QML 中,focus
和 activeFocus
都是用来描述一个 Item(或控件)是否拥有键盘输入焦点的属性,但它们的含义和作用范围完全不同。
focus
是你“申请”焦点的标志activeFocus
是你“真正”拥有焦点的标志
1. focus: bool
可读写,表示该 Item 是否希望获得键盘焦点。
设置
focus = true
只是请求系统把焦点给它,但不一定成功。常用于:
TextInput
、TextField
、Button
等控件初始化时设置焦点。响应用户点击或键盘导航时切换焦点。
TextInput {focus: true // 请求焦点
}
2. activeFocus: bool
(只读)
只读属性,表示该 Item 当前是否真正拥有键盘焦点。
只有当 Item 本身或其某个子项拥有系统焦点时,
activeFocus
才为true
。用于判断当前输入焦点是否落在这个 Item 上。
TextInput {id: inputfocus: trueonActiveFocusChanged: {if (activeFocus)console.log("我现在有焦点")elseconsole.log("我失去焦点了")}
}
举例
Rectangle {width: 200; height: 200TextInput {id: input1width: 180; height: 40text: "输入框1"focus: true // 请求焦点}TextInput {id: input2y: 50width: 180; height: 40text: "输入框2"}
}
页面加载后,
input1.focus === true
,表示它请求了焦点。如果
input1
成功获得了系统焦点,那么input1.activeFocus === true
。如果用户点击了
input2
,则:input1.activeFocus === false
input2.activeFocus === true
但
input1.focus
仍然是true
(因为它没有主动放弃)
属性 | 类型 | 可读/写 | 含义 | 典型用途 |
---|---|---|---|---|
focus | bool | 读写 | 是否请求获得焦点 | 设置初始焦点、切换焦点 |
activeFocus | bool | 只读 | 是否实际拥有系统键盘焦点 | 判断当前输入焦点位置 |
使用建议
想设置焦点:用
focus = true
想判断焦点是否在当前控件:用
activeFocus