QT取出扫码枪数据,防止键盘事件失效
1.键盘输入型扫码枪
一般扫码枪可实现串口连接、USB直连,对于USB直连型可直接获取扫码后得到的字符串,通常是直接显示在鼠标光标处。
Qt编程时,如何将此字符串取到我们的程序内呢?答案是启用键盘监听事件。
在头文件内声明,本文mainwindow.h:
void keyPressEvent(QKeyEvent *);//手持扫码
源文件中定义,本文mainwindow.cpp:
#include <QKeyEvent> //用于键盘事件
void MainWindow::keyPressEvent(QKeyEvent *keyValue)
{
if (keyValue->key() == Qt::Key_Return) //扫码枪内字符串,以回车结尾
{
qDebug() << "QrCode:" << manualStr ;//此时的manualStr便完成了取出
manualStr.clear();
}
else {
manualStr += keyValue->text();
}
}
2.防止键盘监听事件失效
在源文件的构造函数内加入,原文见博客:
//手持扫码枪
this->grabKeyboard();// 开启键盘监听,防止输入失效
备注:一个小提示,防止程序出现尴尬的Bug…
由于使用键盘监听去读取扫码枪数据时,相当于键盘事件一直被扫码枪占用。当你的Qt程序run起来后,你想用键盘在程序某个界面进行输入工作。此时尴尬的现象出现了,所有键盘输入的字母和数字都被扫码枪的监听所占用,键盘输入无法到达界面,被拦截到了manualStr里。
解决:在需要键盘输入的界面开启时,使用 releaseKeyboard()关掉监听。这样你就可以使用键盘了,等你用完键盘之后,视情况需要,再开启键盘监听。
releaseKeyboard(); //关闭键盘监听
这样就可以取得一个比较满意的结果啦~