2

我有一个 Symbol LS2208 条码扫描仪,在我的 linux 机器(Kubuntu 8.10 Intrepid Ibex)中工作正常。每当您扫描条形码时,扫描仪(连接到 USB 端口)会将读数发送到文本插入符号所在的任何位置。我想将扫描仪的所有读数重定向到我的应用程序中的特定小部件(即文本编辑控件)。我该怎么做?尽管我将 C++ 与 Qt GUI 库一起使用,但任何语言或 GUI 库都欢迎示例代码。

4

3 回答 3

4

这可能很棘手,因为大多数条形码扫描仪也被称为键盘楔。它们充当键盘并将按键推入事件流中,以便尽可能与键盘无法区分。这使得最大的兼容性。

许多 USB 条形码扫描仪将自己发布为 HID 端点,然后出于所有意图和目的,它们都是键盘。

您可以尝试做很多事情 - 许多扫描仪可配置为允许它们在条形码数据周围添加前缀和后缀。如果您可以对此进行测试,您只需将字符串发送到正确的位置。这是令人不快的,因为您必须对扫描仪进行元编程。通常这是通过一组特殊的条形码来完成的。 这是您的扫描仪手册的链接。在第 249 页,有用于元编程前缀和后缀的条形码。

您可能想弄清楚如何成为 HID 事件的客户端并将扫描仪事件重定向到您想要的位置。我从未尝试在 LINUX 上这样做。这对 Windows 和 OS 9 时代的 Mac 来说都是一种痛苦(我最后一次广泛使用 USB)。

于 2009-05-15T18:44:18.940 回答
2

我不知道答案,但这里有一些建议可以帮助您了解您的选择:

  1. 在 QCoreApplication::instance() 上安装事件过滤器(或重新实现 QCoreApplication::notify())
  2. 在事件过滤器处理程序中,输出每个事件以寻找有用的信息:

    void eventFilter(QObject *obj, QEvent *evt) {
        qDebug() << obj << evt;
    }
    
  3. 检查调试输出以确定扫描程序触发了哪些事件。

qDebug() 几乎可以理解每一种类型,并且应该为您提供合理的输出,让您可以判断它是作为键盘事件还是以其他方式出现。

于 2009-05-15T17:33:06.630 回答
1

接受的答案似乎有问题。输入将由任何被认为是活动的应用程序处理。因此,如果有人打开 Web 浏览器然后开始扫描条形码,则输入会转到 Web 浏览器而不是应用程序。所需的应用程序甚至不会看到这些事件。

如果应用程序处于活动状态,那么您可以捕获事件并最终确定哪些事件来自条形码扫描仪。然后可以激活适当的小部件以接收输入。

于 2009-05-19T22:47:33.400 回答