Qt 应用程序扫描二维数据矩阵条形码时丢失字符

问题描述 投票:0回答:1

我遇到扫描二维数据矩阵条形码的问题,我发现扫描时缺少不同的字符。此问题仅发生在 Linux 上。 GD4500 Datamatrix 扫描仪在这里用作键盘楔,我使用安装在 qApp (QGuiApplicaiton) 上的事件过滤器来读取扫描的数据。当我将 qDebug 放入事件过滤器中时,我发现数据丢失了。

bool USBPortReader::eventFilter(QObject *obj, QEvent *event)
{
    Q_UNUSED(obj);

    if (event->type() == QEvent::KeyPress)
    {
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);

        qDebug() << "Received data : " << keyEvent->text();

我使用 evtest 应用程序进行了测试,看看我们是否从驱动程序接收到所有数据,并且每次扫描时它都会以条形码打印所有数据。

我尝试将条码扫描仪的USB键盘速度从1毫秒更改为10毫秒,它改善了扫描(之后丢失的字符更少)。增加不能超过 10 毫秒,因为这是扫描仪支持的最大值。尝试使用文本输入(相同的嵌入式平台)在单独的 qml 应用程序中扫描相同的 2D 数据矩阵,观察到相同的缺失字符行为。

我想尝试设置keyboardInputInterval属性,但它仅适用于QApplication,不适用于QGuiApplication。有人可以帮助我如何调整 QGuiApplicaiton 上的设置吗?我无法直接在 X11 上设置它,因为我们的嵌入式应用程序使用 eglfs/framebuffer 并且没有 X11。我正在使用 Qt 5.6.3。

非常感谢任何线索或支持。

qt qml barcode-scanner
1个回答
0
投票

发现将keyboardInputInterval设置为QStyleHints解决了这个问题。

QStyleHints* styleHints = QGuiApplication::styleHints();
styleHints->setProperty("keyboardInputInterval", 1);

此外,我必须将扫描仪的 USB 键盘速度 设置保持为 10 毫秒,以避免丢失任何字符。

© www.soinside.com 2019 - 2024. All rights reserved.