gpt4 book ai didi

c++ - 使用事件过滤器(嵌入式 linux)区分 2 个键盘击键

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:38 25 4
gpt4 key购买 nike

我知道有几个主题与这个相似,他们问的问题不完全相同,他们的答案也不是我需要的。我将尝试简要说明我的情况。

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

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

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

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

谢谢你的帮助,

威廉

最佳答案

Qt 没有这种检测哪个键盘被按下的功能。您应该使用 Linux 事件接口(interface)来区分这两个输入。当您的某个硬件提供某些输入时,您可以通过读取 /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 权限才能读取这些文件。

关于c++ - 使用事件过滤器(嵌入式 linux)区分 2 个键盘击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26373963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com