Перенаправить ввод сканера штрих-кода на определенный виджет в Linux - PullRequest
2 голосов
/ 15 мая 2009

У меня есть сканер штрих-кода Symbol LS2208, и он работает нормально в моем linux box (Kubuntu 8.10 Intrepid Ibex). Всякий раз, когда вы сканируете штрих-код, сканер (подключенный к USB-порту) отправляет показания туда, где находится текстовая вставка. Я хотел бы перенаправить все показания со сканера на определенный виджет в моем приложении (то есть элемент управления редактированием текста). Как мне это сделать? Хотя я использую C ++ с библиотекой Qt GUI, пример кода приветствуется на любом языке или в библиотеке GUI.

Ответы [ 3 ]

4 голосов
/ 15 мая 2009

Это может быть непросто, так как большинство сканеров штрих-кода также известны как клавиатурные клинья. Они функционируют как клавиатура и вставляют клавиши в поток событий, чтобы быть как можно более неотличимыми от клавиатуры. Это обеспечивает наибольшую совместимость.

Многие USB-сканеры штрих-кодов публикуют себя в качестве конечной точки HID, а затем для всех целей они являются клавиатурами.

Есть несколько вещей, которые вы можете попытаться сделать - многие сканеры настраиваются, чтобы позволить им извергать префикс и суффикс вокруг данных штрих-кода. Если вы можете проверить это, просто отправьте строку в нужное место. Это неприятно, потому что вы должны метапрограммировать сканер. Обычно это делается с помощью специального набора штрих-кодов. Вот ссылка на руководство для вашего сканера. На странице 249 имеются штрих-коды для метапрограммирования префикса и суффикса.

Возможно, вы захотите выяснить, как быть клиентом для событий HID, и перенаправить события сканера туда, куда вы их хотите. Я никогда не пытался сделать это на Linux. Это боль как для Windows, так и для OS 9 эпохи Mac (последний раз, когда я много играл с USB).

2 голосов
/ 15 мая 2009

Я не знаю ответа, но вот несколько советов, чтобы узнать, какие у вас есть варианты:

  1. Установить фильтр событий в QCoreApplication :: instance () (или переопределить QCoreApplication :: notify ())
  2. В обработчике фильтра событий выведите каждое событие в поисках чего-нибудь полезного:

    void eventFilter(QObject *obj, QEvent *evt) {
        qDebug() << obj << evt;
    }
    
  3. Проверьте выходные данные отладки, чтобы определить, какие события запускаются сканером.

qDebug () понимает практически каждый тип и должен дать вам разумный вывод, который позволит вам определить, идет ли он в виде событий клавиатуры или что-то еще.

1 голос
/ 20 мая 2009

Кажется, есть проблема с принятым ответом. Ввод будет обрабатываться тем, что считается активным приложением. Таким образом, если кто-то запускает веб-браузер, а затем начинает сканирование штрих-кодов, ввод поступает в веб-браузер, а не в приложение. Желаемое приложение даже не увидит события.

Если приложение активно, то вы можете перехватывать события и в конечном итоге выяснять, какие из них поступают со сканера штрих-кода. Затем соответствующий виджет может быть активирован для получения ввода.

...