Qt различает две клавиатуры? (Один на самом деле является считывателем RFID)

У меня есть простой считыватель RFID, который на самом деле ведет себя как клавиатура и возвращает прочитанные значения с символом возврата в конце.

Я хочу, чтобы мое приложение прослушивало только одно (отдельное) клавиатурное устройство (которое я каким-то образом выберу/отличу) и не получало считанное значение для меня без счетчика, где основное внимание уделяется форме/приложению.

Приложение написано на Qt C++

Меня интересует возможно ли это и как?


person Community    schedule 26.03.2013    source источник
comment
Насколько я знаю, нет кросс-платформенного способа сделать это. На какую ОС вы ориентируетесь?   -  person Karl Bielefeldt    schedule 27.03.2013
comment
О, извините, я забыл упомянуть об этом. Скорее всего это будут только окна.   -  person    schedule 27.03.2013
comment
Я не пользователь Windows, так что это не полный ответ — если вы знаете, как отличить RFID от фактической клавиатуры с помощью событий Windows MSG, то QCoreApplication::winEventFilter (или, в Qt 5, QCoreApplication ::installNativeEventFilter) может помочь.   -  person peppe    schedule 03.04.2013
comment
Я не выигрываю пользовательский эфир :D LOL   -  person    schedule 04.04.2013


Ответы (2)


Не знаю, поможет ли это, но у нас была аналогичная проблема с обнаружением ввода со сканера штрих-кода. Сканер просто «напечатал» некоторые цифры очень быстро; некоторые сканеры заканчивают его управляющим символом, но, поскольку он не универсальный, мы даже не можем на него полагаться.

Я заметил, что QEvent::KeyboardLayoutChange будет срабатывать, когда сканер штрих-кода начнет ввод, но я не уверен, что это применимо ко всем возможным сценариям, но вы можете проверить это.

В итоге мы установили фильтр событий для всего приложения (QApplication::installEventFilter), который проверяет нажатия клавиш (QEvent::ShortcutOverride или QEvent::KeyPress) и на основе таких критериев, как непрерывная последовательность цифр, очень короткий интервал времени и т. д., решает, что это был ввод штрих-кода. У него есть очевидные подводные камни, но если вам нужно очень общее решение, вас может заинтересовать что-то подобное. Кроме того, если ввод RFID всегда возвращает управляющий символ, это может немного упростить этот подход.

person Iosif Spulber    schedule 02.06.2015

Это возможно для ОС Windows с помощью WinAPI. Я никогда не использовал QT, поэтому я не знаю, существуют ли какие-либо оболочки в классах QT для этих целей. Вы должны использовать необработанный ввод. Для быстрого ознакомления перейдите по этой ссылке: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645536%28v=vs.85%29.aspx (там есть пример в разделе Using Raw Input

также взгляните на этот проект http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard Я понимаю, что это написано на C#, но это может быть полезно

person Anton Semenov    schedule 08.04.2013