zoukankan      html  css  js  c++  java
  • qt 键盘驱动分析

    http://www.cuteqt.com/blog/?p=322

    qkbdlinuxinput.cpp

    QWSKeyboardHandler::KeycodeAction ka;
    ka = m_handler->processKeycode(code, value != 0, value == 2);

    qkbd_qws.cpp

    // simple builtin US keymap

    //包含了默认的s_keymap_default和s_keycompose_default
    #include "qkbd_defaultmap_qws_p.h"

    // the unloadKeymap() function needs to be AFTER the defaultmap include,
    // since the sizeof(s_keymap_default) wouldn't work otherwise.

    void QWSKbPrivate::unloadKeymap()
    {
        if (m_keymap && m_keymap != s_keymap_default)
            delete [] m_keymap;
        if (m_keycompose && m_keycompose != s_keycompose_default)
            delete [] m_keycompose;

        m_keymap = s_keymap_default;
        m_keymap_size = sizeof(s_keymap_default) / sizeof(s_keymap_default[0]);
        m_keycompose = s_keycompose_default;
        m_keycompose_size = sizeof(s_keycompose_default) / sizeof(s_keycompose_default[0]);

        // reset state, so we could switch keymaps at runtime
        m_modifiers = 0;
        memset(m_locks, 0, sizeof(m_locks));
        m_composing = 0;
        m_dead_unicode = 0xffff;
    }

    Maps keycode according to a keymap and sends that key event to the Qt for Embedded Linux server application.

    QWSKeyboardHandler::KeycodeAction QWSKeyboardHandler::processKeycode(quint16 keycode, bool pressed, bool autorepeat)

    {

    ……

        // send the result to the QWS server
        processKeyEvent(unicode, qtcode & ~modmask, Qt::KeyboardModifiers(qtcode & modmask), pressed, autorepeat);

    }

    Note that this function does not handle key mapping. Please use processKeycode() if you need that functionality.

    void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, Qt::KeyboardModifiers modifiers,
                            bool isPress, bool autoRepeat)
    {
        qwsServer->processKeyEvent(unicode, keycode, modifiers, isPress, autoRepeat);
    }

  • 相关阅读:
    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境
    iptables详解之filter
    运维自动化神器ansible之user模块
    运维自动化神器ansible之group模块
    利用sed将xml报文转换为分隔符形式报文
    你的火狐很慢吗?
    完全卸载Oracle11g
    MyEclipse注册代码
    css 空心字
    TEST 1 READING AND WRITING -- PART ONE
  • 原文地址:https://www.cnblogs.com/cute/p/2143463.html
Copyright © 2011-2022 走看看