FlickKey QML 类型
FlickKey 是 Qt Quick Virtual Keyboard 中的一种特殊按键类型,继承自 BaseKey。它的主要特点是支持滑动(flick)手势,允许用户通过在按键上不同方向的滑动来输入额外的字符或执行不同的功能。
特性
FlickKey 最显著的特性是支持多方向滑动操作,通常用于:
- 快速输入特殊字符
- 实现数字与符号的快速切换
- 在同一个键位实现多个字符的输入
属性
除了继承自 BaseKey 的所有属性外,FlickKey 还具有以下特有属性:
- flickKeys: var - 定义滑动方向对应的字符或功能,通常是一个包含上、下、左、右四个方向映射的对象
- flickDirection: int - 当前检测到的滑动方向
- flickThreshold: real - 触发滑动操作的阈值距离
- flickTimeout: int - 滑动手势识别的超时时间(毫秒)
- activeFlickDirection: int - 当前激活的滑动方向
滑动方向常量
FlickKey 定义了以下滑动方向常量:
- FlickKey.FlickNone: 0 - 无滑动
- FlickKey.FlickUp: 1 - 向上滑动
- FlickKey.FlickDown: 2 - 向下滑动
- FlickKey.FlickLeft: 3 - 向左滑动
- FlickKey.FlickRight: 4 - 向右滑动
信号
- flickDirectionChanged(): 当滑动方向改变时触发
- flickTriggered(int direction): 当滑动手势被识别触发时发出
使用示例
import QtQuick 2.15
import QtQuick.VirtualKeyboard 2.15
FlickKey {
key: Qt.Key_7
text: "7"
width: 60
height: 60
flickKeys: {
"FlickUp": {key: Qt.Key_Ampersand, text: "&"},
"FlickDown": {key: Qt.Key_Slash, text: "/"},
"FlickLeft": {key: Qt.Key_Less, text: "<"},
"FlickRight": {key: Qt.Key_Greater, text: ">"}
}
onFlickTriggered: function(direction) {
if (direction === FlickKey.FlickUp)
console.log("向上滑动,输入 &")
else if (direction === FlickKey.FlickDown)
console.log("向下滑动,输入 /")
// 其他方向处理...
}
}
应用场景
FlickKey 在以下场景中特别有用:
- 手机数字键盘:数字键上滑动输入特殊符号
- 紧凑型键盘:减少按键数量,同时保持输入多种字符的能力
- 多语言键盘:快速访问重音字符和特殊字母
- 单手操作优化:通过滑动减少手指移动距离
自定义 FlickKey 示例
创建一个数字与符号组合的 FlickKey:
FlickKey {
id: numberKey
key: Qt.Key_1
text: "1"
// 在四个方向上定义不同的符号
flickKeys: {
"FlickUp": {key: Qt.Key_Exclam, text: "!"},
"FlickDown": {key: Qt.Key_At, text: "@"},
"FlickLeft": {key: Qt.Key_NumberSign, text: "#"},
"FlickRight": {key: Qt.Key_Dollar, text: "$"}
}
// 视觉反馈
Rectangle {
id: directionIndicator
visible: parent.activeFlickDirection !== FlickKey.FlickNone
color: "lightblue"
opacity: 0.5
width: parent.width / 3
height: parent.height / 3
// 根据滑动方向调整位置
states: [
State {
when: numberKey.activeFlickDirection === FlickKey.FlickUp
PropertyChanges { target: directionIndicator; y: 0 }
},
State {
when: numberKey.activeFlickDirection === FlickKey.FlickDown
PropertyChanges { target: directionIndicator; y: parent.height - height }
}
// 其他方向状态...
]
}
}
通过 FlickKey,可以显著增强虚拟键盘的输入效率,尤其是在屏幕空间有限的移动设备上。