使用eventfilter(嵌入式linux)区分2个键盘击键

时间:2014-10-15 03:22:36

标签: c++ linux qt keyboard keystrokes

我知道有一些类似于这个的主题,他们不会问完全相同的问题,他们的答案不是我需要的。我将尝试简要解释一下我的情况。

我有两个键盘,一个是标准USB键盘(HID),另一个是GPIO键盘。键盘通常会报告键,但我需要在Qt应用程序中执行不同的操作,具体取决于按键的键盘。

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

这甚至可能吗?我正在使用Qt 4.8.5,我可以重新编译它,以防需要它来完成我需要的工作。

任何帮助,提示,小费都将受到高度赞赏。

感谢您的帮助,

威廉

1 个答案:

答案 0 :(得分:0)

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

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

在第一个帖子中:

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权限以从这些文件中读取。