首页 > 解决方案 > 添加缺少的按钮映射

问题描述

我正在为 android 创建一个 qml 应用程序,并在尝试捕获按钮按下时遇到以下问题:

当我按下volume up,volume downhome按钮时。以下截图:0这意味着关键事件是未知的(基于QKeyEvent 文档

Keys.onPressed: {
    console.log(event.key);
}

按下按钮时,我还在 logcat 中看到此警告home

Unhandled key code  3 !

或按下按钮时出现此警告volume up

Unhandled key code  252 !

我的问题:如何为这个键码添加处理程序/映射器?

示例我想将键码 3 映射到 Qt.Key_Home 以便接收正确的键事件Keys.onPressed

标签: androidqtqml

解决方案


我能够通过以下方式将设备使用的关键代码“重新映射”到 Qt 期望的关键代码:

  1. 复制$QT/src/android/java/src/org/qtproject/qt5/android/binding/到您的项目文件夹中。
  2. 更改ANDROID_PACKAGE_SOURCE_DIR.pro的指向此文件夹。
  3. 重命名新android/binding/文件夹中所有类的包名以适合 qml 应用程序的包名。
  4. 添加您的自定义映射代码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);
    }
    

推荐阅读