添加缺失按钮映射

时间:2018-05-03 07:56:17

标签: android qt qml

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

当我按下volume upvolume downhome按钮时。以下剪切打印: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

中接收正确的密钥事件

2 个答案:

答案 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
    }
}

另请看一下:http://doc.qt.io/qt-5/qt.html#Key-enum

答案 1 :(得分:0)

我能够将我的设备使用的密钥代码“重新映射”到密钥代码Qt期望:

  1. $QT/src/android/java/src/org/qtproject/qt5/android/binding/复制到您的proejct文件夹中。
  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);
    }