Я знаю, что было несколько тем, похожих на эту, они не задают точно такой же вопрос, и их ответы — не то, что мне нужно. Я постараюсь кратко объяснить мою ситуацию.
У меня есть две клавиатуры, одна стандартная клавиатура USB (HID), другая клавиатура GPIO. Об обеих клавиатурах обычно сообщают о клавишах, но мне нужно выполнять различные действия в моем приложении Qt в зависимости от того, на какой клавиатуре была нажата клавиша.
На данный момент обе клавиатуры работают нормально одновременно, но я просто не могу найти способ определить, с какой клавиатуры приходит нажатая клавиша.
Это вообще возможно? Я использую Qt 4.8.5 и могу перекомпилировать его, если это необходимо для выполнения того, что мне нужно.
Любая помощь, подсказка, совет будут высоко оценены.
Спасибо вам за помощь,
Уильям
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-доступ для чтения из этих файлов.