⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qkeymapper_x11.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    XK_KP_Up,                   Qt::Key_Up,    XK_KP_Right,                Qt::Key_Right,    XK_KP_Down,                 Qt::Key_Down,    XK_KP_Prior,                Qt::Key_PageUp,    XK_KP_Next,                 Qt::Key_PageDown,    XK_KP_End,                  Qt::Key_End,    XK_KP_Begin,                Qt::Key_Clear,    XK_KP_Insert,               Qt::Key_Insert,    XK_KP_Delete,               Qt::Key_Delete,    XK_KP_Equal,                Qt::Key_Equal,    XK_KP_Multiply,             Qt::Key_Asterisk,    XK_KP_Add,                  Qt::Key_Plus,    XK_KP_Separator,            Qt::Key_Comma,    XK_KP_Subtract,             Qt::Key_Minus,    XK_KP_Decimal,              Qt::Key_Period,    XK_KP_Divide,               Qt::Key_Slash,    // International input method support keys    // International & multi-key character composition    XK_ISO_Level3_Shift,        Qt::Key_AltGr,    XK_Multi_key,		Qt::Key_Multi_key,    XK_Codeinput,		Qt::Key_Codeinput,    XK_SingleCandidate,		Qt::Key_SingleCandidate,    XK_MultipleCandidate,	Qt::Key_MultipleCandidate,    XK_PreviousCandidate,	Qt::Key_PreviousCandidate,    // Misc Functions    XK_Mode_switch,		Qt::Key_Mode_switch,    XK_script_switch,		Qt::Key_Mode_switch,    // Japanese keyboard support    XK_Kanji,			Qt::Key_Kanji,    XK_Muhenkan,		Qt::Key_Muhenkan,    //XK_Henkan_Mode,		Qt::Key_Henkan_Mode,    XK_Henkan_Mode,		Qt::Key_Henkan,    XK_Henkan,			Qt::Key_Henkan,    XK_Romaji,			Qt::Key_Romaji,    XK_Hiragana,		Qt::Key_Hiragana,    XK_Katakana,		Qt::Key_Katakana,    XK_Hiragana_Katakana,	Qt::Key_Hiragana_Katakana,    XK_Zenkaku,			Qt::Key_Zenkaku,    XK_Hankaku,			Qt::Key_Hankaku,    XK_Zenkaku_Hankaku,		Qt::Key_Zenkaku_Hankaku,    XK_Touroku,			Qt::Key_Touroku,    XK_Massyo,			Qt::Key_Massyo,    XK_Kana_Lock,		Qt::Key_Kana_Lock,    XK_Kana_Shift,		Qt::Key_Kana_Shift,    XK_Eisu_Shift,		Qt::Key_Eisu_Shift,    XK_Eisu_toggle,		Qt::Key_Eisu_toggle,    //XK_Kanji_Bangou,		Qt::Key_Kanji_Bangou,    //XK_Zen_Koho,		Qt::Key_Zen_Koho,    //XK_Mae_Koho,		Qt::Key_Mae_Koho,    XK_Kanji_Bangou,		Qt::Key_Codeinput,    XK_Zen_Koho,		Qt::Key_MultipleCandidate,    XK_Mae_Koho,		Qt::Key_PreviousCandidate,#ifdef XK_KOREAN    // Korean keyboard support    XK_Hangul,			Qt::Key_Hangul,    XK_Hangul_Start,		Qt::Key_Hangul_Start,    XK_Hangul_End,		Qt::Key_Hangul_End,    XK_Hangul_Hanja,		Qt::Key_Hangul_Hanja,    XK_Hangul_Jamo,		Qt::Key_Hangul_Jamo,    XK_Hangul_Romaja,		Qt::Key_Hangul_Romaja,    //XK_Hangul_Codeinput,	Qt::Key_Hangul_Codeinput,    XK_Hangul_Codeinput,	Qt::Key_Codeinput,    XK_Hangul_Jeonja,		Qt::Key_Hangul_Jeonja,    XK_Hangul_Banja,		Qt::Key_Hangul_Banja,    XK_Hangul_PreHanja,		Qt::Key_Hangul_PreHanja,    XK_Hangul_PostHanja,	Qt::Key_Hangul_PostHanja,    //XK_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate,    //XK_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate,    //XK_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate,    XK_Hangul_SingleCandidate,	Qt::Key_SingleCandidate,    XK_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate,    XK_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate,    XK_Hangul_Special,		Qt::Key_Hangul_Special,    //XK_Hangul_switch,		Qt::Key_Hangul_switch,    XK_Hangul_switch,		Qt::Key_Mode_switch,#endif  // XK_KOREAN    // dead keys    XK_dead_grave,              Qt::Key_Dead_Grave,    XK_dead_acute,              Qt::Key_Dead_Acute,    XK_dead_circumflex,         Qt::Key_Dead_Circumflex,    XK_dead_tilde,              Qt::Key_Dead_Tilde,    XK_dead_macron,             Qt::Key_Dead_Macron,    XK_dead_breve,              Qt::Key_Dead_Breve,    XK_dead_abovedot,           Qt::Key_Dead_Abovedot,    XK_dead_diaeresis,          Qt::Key_Dead_Diaeresis,    XK_dead_abovering,          Qt::Key_Dead_Abovering,    XK_dead_doubleacute,        Qt::Key_Dead_Doubleacute,    XK_dead_caron,              Qt::Key_Dead_Caron,    XK_dead_cedilla,            Qt::Key_Dead_Cedilla,    XK_dead_ogonek,             Qt::Key_Dead_Ogonek,    XK_dead_iota,               Qt::Key_Dead_Iota,    XK_dead_voiced_sound,       Qt::Key_Dead_Voiced_Sound,    XK_dead_semivoiced_sound,   Qt::Key_Dead_Semivoiced_Sound,    XK_dead_belowdot,           Qt::Key_Dead_Belowdot,    XK_dead_hook,               Qt::Key_Dead_Hook,    XK_dead_horn,               Qt::Key_Dead_Horn,    // Special multimedia keys    // currently only tested with MS internet keyboard    // browsing keys    XF86XK_Back,                Qt::Key_Back,    XF86XK_Forward,             Qt::Key_Forward,    XF86XK_Stop,                Qt::Key_Stop,    XF86XK_Refresh,             Qt::Key_Refresh,    XF86XK_Favorites,           Qt::Key_Favorites,    XF86XK_AudioMedia,          Qt::Key_LaunchMedia,    XF86XK_OpenURL,             Qt::Key_OpenUrl,    XF86XK_HomePage,            Qt::Key_HomePage,    XF86XK_Search,              Qt::Key_Search,    // media keys    XF86XK_AudioLowerVolume,    Qt::Key_VolumeDown,    XF86XK_AudioMute,           Qt::Key_VolumeMute,    XF86XK_AudioRaiseVolume,    Qt::Key_VolumeUp,    XF86XK_AudioPlay,           Qt::Key_MediaPlay,    XF86XK_AudioStop,           Qt::Key_MediaStop,    XF86XK_AudioPrev,           Qt::Key_MediaPrevious,    XF86XK_AudioNext,           Qt::Key_MediaNext,    XF86XK_AudioRecord,         Qt::Key_MediaRecord,    // launch keys    XF86XK_Mail,                Qt::Key_LaunchMail,    XF86XK_MyComputer,          Qt::Key_Launch0,    XF86XK_Calculator,          Qt::Key_Launch1,    XF86XK_Standby,             Qt::Key_Standby,    XF86XK_Launch0,             Qt::Key_Launch2,    XF86XK_Launch1,             Qt::Key_Launch3,    XF86XK_Launch2,             Qt::Key_Launch4,    XF86XK_Launch3,             Qt::Key_Launch5,    XF86XK_Launch4,             Qt::Key_Launch6,    XF86XK_Launch5,             Qt::Key_Launch7,    XF86XK_Launch6,             Qt::Key_Launch8,    XF86XK_Launch7,             Qt::Key_Launch9,    XF86XK_Launch8,             Qt::Key_LaunchA,    XF86XK_Launch9,             Qt::Key_LaunchB,    XF86XK_LaunchA,             Qt::Key_LaunchC,    XF86XK_LaunchB,             Qt::Key_LaunchD,    XF86XK_LaunchC,             Qt::Key_LaunchE,    XF86XK_LaunchD,             Qt::Key_LaunchF,    0,                          0};static int translateKeySym(uint key){    int code = -1;    int i = 0;                                // any other keys    while (KeyTbl[i]) {        if (key == KeyTbl[i]) {            code = (int)KeyTbl[i+1];            break;        }        i += 2;    }    if (qt_meta_mask) {        // translate Super/Hyper keys to Meta if we're using them as the MetaModifier        if (qt_meta_mask == qt_super_mask && (code == Qt::Key_Super_L || code == Qt::Key_Super_R)) {            code = Qt::Key_Meta;        } else if (qt_meta_mask == qt_hyper_mask && (code == Qt::Key_Hyper_L || code == Qt::Key_Hyper_R)) {            code = Qt::Key_Meta;        }    }    return code;}#if !defined(QT_NO_XIM)static const unsigned short katakanaKeysymsToUnicode[] = {    0x0000, 0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1,    0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3,    0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD,    0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD,    0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC,    0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE,    0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9,    0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C};static const unsigned short cyrillicKeysymsToUnicode[] = {    0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457,    0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0000, 0x045e, 0x045f,    0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,    0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0000, 0x040e, 0x040f,    0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,    0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,    0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,    0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,    0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,    0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,    0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,    0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a};static const unsigned short greekKeysymsToUnicode[] = {    0x0000, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c,    0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015,    0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc,    0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,    0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,    0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7,    0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,    0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,    0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7,    0x03c8, 0x03c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};static const unsigned short technicalKeysymsToUnicode[] = {    0x0000, 0x23B7, 0x250C, 0x2500, 0x2320, 0x2321, 0x2502, 0x23A1,    0x23A3, 0x23A4, 0x23A6, 0x239B, 0x239D, 0x239E, 0x23A0, 0x23A8,    0x23AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222B,    0x2234, 0x221D, 0x221E, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000,    0x223C, 0x2243, 0x0000, 0x0000, 0x0000, 0x21D4, 0x21D2, 0x2261,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x0000,    0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222A, 0x2227, 0x2228,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000,    0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193, 0x0000};static const unsigned short specialKeysymsToUnicode[] = {    0x25C6, 0x2592, 0x2409, 0x240C, 0x240D, 0x240A, 0x0000, 0x0000,    0x2424, 0x240B, 0x2518, 0x2510, 0x250C, 0x2514, 0x253C, 0x23BA,    0x23BB, 0x2500, 0x23BC, 0x23BD, 0x251C, 0x2524, 0x2534, 0x252C,    0x2502, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};static const unsigned short publishingKeysymsToUnicode[] = {    0x0000, 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009,    0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025,    0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a,    0x2105, 0x0000, 0x0000, 0x2012, 0x2329, 0x0000, 0x232a, 0x0000,    0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000,    0x0000, 0x2122, 0x2613, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25af,    0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033,    0x0000, 0x271d, 0x0000, 0x25ac, 0x25c0, 0x25b6, 0x25cf, 0x25ae,    0x25e6, 0x25ab, 0x25ad, 0x25b3, 0x25bd, 0x2606, 0x2022, 0x25aa,    0x25b2, 0x25bc, 0x261c, 0x261e, 0x2663, 0x2666, 0x2665, 0x0000,    0x2720, 0x2020, 0x2021, 0x2713, 0x2717, 0x266f, 0x266d, 0x2642,    0x2640, 0x260e, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e, 0x0000};static const unsigned short aplKeysymsToUnicode[] = {    0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x0000, 0x003e, 0x0000,    0x2228, 0x2227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x00af, 0x0000, 0x22a5, 0x2229, 0x230a, 0x0000, 0x005f, 0x0000,    0x0000, 0x0000, 0x2218, 0x0000, 0x2395, 0x0000, 0x22a4, 0x25cb,    0x0000, 0x0000, 0x0000, 0x2308, 0x0000, 0x0000, 0x222a, 0x0000,    0x2283, 0x0000, 0x2282, 0x0000, 0x22a2, 0x0000, 0x0000, 0x0000,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,    0x0000, 0x0000, 0x0000, 0x0000, 0x22a3, 0x0000, 0x0000, 0x0000};static const unsigned short koreanKeysymsToUnicode[] = {    0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137,    0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f,    0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147,    0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f,    0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157,    0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f,    0x3160, 0x3161, 0x3162, 0x3163, 0x11a8, 0x11a9, 0x11aa, 0x11ab,    0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3,    0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb,    0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x316d,    0x3171, 0x3178, 0x317f, 0x3181, 0x3184, 0x3186, 0x318d, 0x318e,    0x11eb, 0x11f0, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9};static QChar keysymToUnicode(unsigned char byte3, unsigned char byte4){    switch (byte3) {    case 0x04:        // katakana        if (byte4 > 0xa0 && byte4 < 0xe0)            return QChar(katakanaKeysymsToUnicode[byte4 - 0xa0]);        else if (byte4 == 0x7e)            return QChar(0x203e); // Overline        break;    case 0x06:        // russian, use lookup table        if (byte4 > 0xa0)            return QChar(cyrillicKeysymsToUnicode[byte4 - 0xa0]);        break;    case 0x07:        // greek        if (byte4 > 0xa0)            return QChar(greekKeysymsToUnicode[byte4 - 0xa0]);        break;    case 0x08:        // technical        if (byte4 > 0xa0)            return QChar(technicalKeysymsToUnicode[byte4 - 0xa0]);        break;    case 0x09:        // special        if (byte4 >= 0xe0)            return QChar(specialKeysymsToUnicode[byte4 - 0xe0]);        break;    case 0x0a:        // publishing        if (byte4 > 0xa0)            return QChar(publishingKeysymsToUnicode[byte4 - 0xa0]);        break;    case 0x0b:        // APL        if (byte4 > 0xa0)            return QChar(aplKeysymsToUnicode[byte4 - 0xa0]);        break;    case 0x0e:        // Korean        if (byte4 > 0xa0)            return QChar(koreanKeysymsToUnicode[byte4 - 0xa0]);        break;    default:        break;    }    return QChar(0x0);}#endifstatic QString translateKeySym(KeySym keysym, uint xmodifiers,                               int &code, Qt::KeyboardModifiers &modifiers,                               QByteArray &chars, int &count){    // all keysyms smaller than 0xff00 are actally keys that can be mapped to unicode chars    extern QTextCodec *qt_input_mapper; // from qapplication_x11.cpp    QTextCodec *mapper = qt_input_mapper;    QChar converted;    if (count == 0 && keysym < 0xff00) {        unsigned char byte3 = (unsigned char)(keysym >> 8);        int mib = -1;        switch(byte3) {        case 0: // Latin 1        case 1: // Latin 2        case 2: //latin 3        case 3: // latin4            mib = byte3 + 4; break;        case 5: // arabic            mib = 82; break;        case 12: // Hebrew            mib = 85; break;        case 13: // Thai            mib = 2259; break;        case 4: // kana        case 6: // cyrillic        case 7: // greek        case 8: // technical, no mapping here at the moment        case 9: // Special        case 10: // Publishing        case 11: // APL        case 14: // Korean, no mapping            mib = -1; // manual conversion            mapper = 0;#if !defined(QT_NO_XIM)            converted = keysymToUnicode(byte3, keysym & 0xff);#endif        case 0x20:            // currency symbols            if (keysym >= 0x20a0 && keysym <= 0x20ac) {                mib = -1; // manual conversion                mapper = 0;                converted = (uint)keysym;            }            break;        default:            break;        }        if (mib != -1) {            mapper = QTextCodec::codecForMib(mib);            if (chars.isEmpty())                chars.resize(1);            chars[0] = (unsigned char) (keysym & 0xff); // get only the fourth bit for conversion later            count++;        }    } else if (keysym >= 0x1000000 && keysym <= 0x100ffff) {        converted = (ushort) (keysym - 0x1000000);        mapper = 0;    }    if (count < (int)chars.size()-1)        chars[count] = '\0';    QString text;    if (!mapper && converted.unicode() != 0x0) {        text = converted;    } else if (!chars.isEmpty()) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -