我正在为Android创建一个qml应用程序,并在尝试捕获按钮时遇到以下问题:
当我按下volume up
,volume down
或home
按钮时。以下剪切打印:0
表示关键事件未知(基于QKeyEvent docu)
Keys.onPressed: {
console.log(event.key);
}
按下home
按钮时,我也会在logcat中看到此警告:
Unhandled key code 3 !
按下volume up
按钮时或此警告:
Unhandled key code 252 !
我的问题:如何为此密钥代码添加处理程序/映射程序?
示例我想将密钥代码3映射到Qt.Key_Home,以便在Keys.onPressed
答案 0 :(得分:0)
不在我的QML机器附近,但我的头顶做了类似的事情。
使用所需的密钥代码创建一个全局对象,如..
QtObject {
id: key_code
property int volume_up: 252
property int volume_down: <key_code_val>
property int key_home: 3
}
然后像...一样使用它。
Keys.onPressed {
if (event.key === key_code.volume_up) {
//Do volume up handling..
event.accepted = true
}
}
答案 1 :(得分:0)
我能够将我的设备使用的密钥代码“重新映射”到密钥代码Qt期望:
$QT/src/android/java/src/org/qtproject/qt5/android/binding/
复制到您的proejct文件夹中。ANDROID_PACKAGE_SOURCE_DIR
中的.pro
更改为指向此文件夹。android/binding/
文件夹中所有类的包名称,以适合qml应用的包名称。在onKeyDown()
中添加自定义映射代码:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
//do the remapping for the home button
if(keyCode == 3) {
keyCode = 122;
}
if (QtApplication.m_delegateObject != null && QtApplication.onKeyDown != null)
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyDown, keyCode, event);
else
return super.onKeyDown(keyCode, event);
}