在Linux中获取键盘密钥代码

时间:2014-01-20 23:50:18

标签: c++ linux qt enums keycode

我需要在Linux中从键盘输入(但之后)获取密钥代码,我能够找到 仅限Windows中的密钥代码。

使用枚举我可以使它跨平台,继承人是一块(不完整,太大)的 枚举代​​码:

  enum e_IWEKey
{
  Unknown = 0,

// Digits / Numbers
D0,
D1,
D2,
D3,
D4,
D5,
D6,
D7,
D8,
D9,

// Letters
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
}

另外还有一个Win32API密钥代码。

    #ifdef _WIN32
    # include <WinUser.h>

  inline e_IWEKey getKey(uchar OSKey)
  {
    switch (OSKey)
    {
      // Digits / Numbers
    case 0x30: return IWEKeys::D0;
    case 0x31: return IWEKeys::D1;
    case 0x32: return IWEKeys::D2;
    case 0x33: return IWEKeys::D3;
    case 0x34: return IWEKeys::D4;
    case 0x35: return IWEKeys::D5;
    case 0x36: return IWEKeys::D6;
    case 0x37: return IWEKeys::D7;
    case 0x38: return IWEKeys::D8;
    case 0x39: return IWEKeys::D9;

      // Letters
    case 0x41: return IWEKeys::A;
    case 0x42: return IWEKeys::B;
    case 0x43: return IWEKeys::C;
    case 0x44: return IWEKeys::D;
    case 0x45: return IWEKeys::E;
    case 0x46: return IWEKeys::F;
    case 0x47: return IWEKeys::G;
    case 0x48: return IWEKeys::H;
    case 0x49: return IWEKeys::I;
    case 0x4A: return IWEKeys::J;
    case 0x4B: return IWEKeys::K;
    case 0x4C: return IWEKeys::L;
    case 0x4D: return IWEKeys::M;
    case 0x4E: return IWEKeys::N;
    case 0x4F: return IWEKeys::O;
    case 0x50: return IWEKeys::P;
    case 0x51: return IWEKeys::Q;
    case 0x52: return IWEKeys::R;
    case 0x53: return IWEKeys::S;
    case 0x54: return IWEKeys::T;
    case 0x55: return IWEKeys::U;
    case 0x56: return IWEKeys::V;
    case 0x57: return IWEKeys::W;
    case 0x58: return IWEKeys::X;
    case 0x59: return IWEKeys::Y;
    case 0x5A: return IWEKeys::Z;

      // Function Keys
    case VK_F1: return IWEKeys::F1;
    case VK_F2: return IWEKeys::F2;
    case VK_F3: return IWEKeys::F3;
    case VK_F4: return IWEKeys::F4;
    case VK_F5: return IWEKeys::F5;
    case VK_F6: return IWEKeys::F6;
    case VK_F7: return IWEKeys::F7;
    case VK_F8: return IWEKeys::F8;
    case VK_F9: return IWEKeys::F9;
    case VK_F10: return IWEKeys::F10;
    case VK_F11: return IWEKeys::F11;
    case VK_F12: return IWEKeys::F12;
    case VK_F13: return IWEKeys::F13;
    case VK_F14: return IWEKeys::F14;
    case VK_F15: return IWEKeys::F15;
    case VK_F16: return IWEKeys::F16;
    case VK_F17: return IWEKeys::F17;
    case VK_F18: return IWEKeys::F18;
    case VK_F19: return IWEKeys::F19;
    case VK_F20: return IWEKeys::F20;
    case VK_F21: return IWEKeys::F21;
    case VK_F22: return IWEKeys::F22;
    case VK_F23: return IWEKeys::F23;
    case VK_F24: return IWEKeys::F24;
    }
    }
    #endif

但我从未找到Linux密钥代码,我需要使用内部Linux API(或POSIX),X11 API或特定于工具包的API? (作为Qt)。  感谢。

1 个答案:

答案 0 :(得分:1)

如果你可以使用qt,那就是Qt::Key enum

基于如何在qt中定义键,我认为关键代码在linux和windows之间不会改变......