使用eventfilter(嵌入式linux)区分两个键盘按键
distinguish 2 keyboards keystrokes using eventfilter (embedded linux)
我知道有几个主题与此类似,他们不会问完全相同的问题,他们的答案也不是我需要的。我将试着简要解释一下我的情况。
我有两个键盘,一个是标准的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访问权限。
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 将fold表达式与std::一起用于两个元组
- 如何在C++中比较两个char数组
- 给定两个偶数,求出它们之间所有偶数的平方和
- 比较两个大小不等的映射c++
- 如何使用 Turbo C++并行运行两个功能,一个用于键盘,一个用于鼠标?
- 如何在FLTK中使用两个不同的小部件使用键盘箭头和鼠标单击
- 相同的键盘键充当两个相反操作的快捷方式
- 使用eventfilter(嵌入式linux)区分两个键盘按键