c++ - 在 Linux 中获取键盘键码键

标签 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,
}

这里是另一 block 各自的 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)。 谢谢。

最佳答案

如果能用qt,就有Qt::Key enum .

根据qt中键的定义方式,我认为键代码在linux和windows之间不会改变......

关于c++ - 在 Linux 中获取键盘键码键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246504/

相关文章:

linux - 如何替换字符串(字符和数字)

c - 由于移植到不同的 gcc 版本而导致的问题

c++ - Qt rand() 不能正常工作

c++ - Qt中如何设置central widget填充整个主窗口

c++ - 仅禁用 QTreeWidget 中的一项

c++ - 为什么基类的构造函数先调用?

c++ - unsigned char 数组到 unsigned int 通过 memcpy 返回到 unsigned char 数组被反转

c++ - 使用 stringstream 对字符串进行标记,其中最后一个字符是分隔符

c++ - Boost、bjam 和符号链接(symbolic link)

linux - 为什么 ctags -R 。不为子目录中的源代码生成索引?