C++ 使用eventfilter(嵌入式linux)区分2个键盘按键

C++ 使用eventfilter(嵌入式linux)区分2个键盘按键,c++,linux,qt,keyboard,keystrokes,C++,Linux,Qt,Keyboard,Keystrokes,我知道也有一些类似的话题,他们不会问完全相同的问题,他们的答案也不是我需要的。我将试着简要地解释一下我的情况 我有两个键盘,一个是标准USB键盘HID,另一个是GPIO键盘。两个键盘通常都会报告一些键,但我需要在Qt应用程序中根据按下键的键盘采取不同的操作 此时,两个键盘同时工作正常,但我就是找不到一种方法来识别按下的键来自哪个键盘 这可能吗?我正在使用Qt4.8.5,我可以重新编译它,以防需要它来完成我所需要的 任何帮助、暗示、提示都将不胜感激 谢谢你的帮助 WilliamQt没有此功能来检测

我知道也有一些类似的话题,他们不会问完全相同的问题,他们的答案也不是我需要的。我将试着简要地解释一下我的情况

我有两个键盘,一个是标准USB键盘HID,另一个是GPIO键盘。两个键盘通常都会报告一些键,但我需要在Qt应用程序中根据按下键的键盘采取不同的操作

此时,两个键盘同时工作正常,但我就是找不到一种方法来识别按下的键来自哪个键盘

这可能吗?我正在使用Qt4.8.5,我可以重新编译它,以防需要它来完成我所需要的

任何帮助、暗示、提示都将不胜感激

谢谢你的帮助


William

Qt没有此功能来检测按下的键盘。您应该使用Linux事件接口来区分这两个输入。当某个硬件中有输入可用时,您可以通过读取/dev/input/目录下的字符设备来访问它。例如,您可能有一个类似/dev/input/by id/usb-0b38_0010-event-kbd的文件,可以读取该文件以查看特定键盘的输入

您可以在两个单独的线程中读取两个键盘的特定文件,每次从其中一个中读取一些新数据时,都会向主线程发送一个信号,通知输入来自哪个键盘:

在第一个线程中:

QFile file("/dev/input/by-id/FileForKeyboard1");

if(file.open( QIODevice::ReadOnly | QIODevice::Text ) )
{
    QTextStream stream( &file );
    while(true)
    {
        stream.read(1);
        emit keyBoard1_Pressed();
    }
}
在第二个线程中:

QFile file("/dev/input/by-id/FileForKeyboard2");

if(file.open( QIODevice::ReadOnly | QIODevice::Text ) )
{
    QTextStream stream( &file );
    while(true)
    {
        stream.read(1);
        emit keyBoard2_Pressed();
    }
}
请注意,您应该具有从这些文件读取的root访问权限