различать 2 нажатия клавиш клавиатуры с помощью EventFilter (встроенный Linux)

Я знаю, что было несколько тем, похожих на эту, они не задают точно такой же вопрос, и их ответы — не то, что мне нужно. Я постараюсь кратко объяснить мою ситуацию.

У меня есть две клавиатуры, одна стандартная клавиатура USB (HID), другая клавиатура GPIO. Об обеих клавиатурах обычно сообщают о клавишах, но мне нужно выполнять различные действия в моем приложении Qt в зависимости от того, на какой клавиатуре была нажата клавиша.

На данный момент обе клавиатуры работают нормально одновременно, но я просто не могу найти способ определить, с какой клавиатуры приходит нажатая клавиша.

Это вообще возможно? Я использую Qt 4.8.5 и могу перекомпилировать его, если это необходимо для выполнения того, что мне нужно.

Любая помощь, подсказка, совет будут высоко оценены.

Спасибо вам за помощь,

Уильям

1

Решение

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-доступ для чтения из этих файлов.

0

Другие решения


По вопросам рекламы [email protected]