1

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

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

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

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

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

感谢您的帮助,

威廉

4

1 回答 1

0

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 访问权限。

于 2014-10-15T04:45:00.223 回答