qt之扫码枪编码自动识别文本

一、前言

使用扫码枪输入扫码后,自动将编码转为文字或识别进入下一功能。

只是简单的实现了一种方式,并不适用于商业用途

二、环境

扫码枪免驱自动扫码编码打印到输入库的环境下

三、正文

本文介绍也是输入一种方式,不限于非得扫码识别文本,可以扫码进入某项功能, 或扫码识别后干其他什么事情都可以。

1.需要一个code.xlsx文档,来做扫码和识别后的文本对应关系

2.在ui界面创建一个QLineEdit控件

3.关键代码

使用QXlsx类创建模板文件

    //扫描枪编码设置
    //打开配置文件
    connect(ui->btn_codeopen,&QPushButton::clicked,[=](){
        QString path="../res/code.xlsx";
        QFile file(path);
        if(!file.exists())
            massage_dialog(1,"提示","未找到code.xlsx编码文件!请新建code.xlsx文件!",1,30);
        else{
            QDesktopServices::openUrl(QUrl::fromLocalFile(path));
        }
    });
    //新建配置文件
    connect(ui->btn_codenew,&QPushButton::clicked,[=](){
        QString path="../res/code.xlsx";
        QFile file(path);
        if(file.exists())
            massage_dialog(1,"提示","新建code.xlsx失败!已存在code.xlsx文件!",1,30);
        else{
            QXlsx::Document xlsx;
            //写大标题,标题在第一行
            QXlsx::Format formatTitle;
            formatTitle.setFontBold(true);// 粗体
            formatTitle.setFontColor(QColor(Qt::black));//文字颜色
            formatTitle.setFontSize(20);//字体大小
            formatTitle.setBorderStyle(QXlsx::Format::BorderThin);//边框样式,细网格线
            formatTitle.setPatternBackgroundColor(Qt::lightGray);//单元格背景色
            formatTitle.setFillPattern(QXlsx::Format::PatternSolid);//填充样式
            formatTitle.setHorizontalAlignment(QXlsx::Format::AlignHCenter);//文本水平居中
            xlsx.write(1,1,"编码",formatTitle);
            xlsx.write(1,2,"名称",formatTitle);
            //写内容,从第二行开始,1-2列
            QXlsx::Format format2;
            format2.setBorderStyle(QXlsx::Format::BorderThin);//边框样式,细网格线
            format2.setHorizontalAlignment(QXlsx::Format::AlignHCenter);//文本水平居中
            xlsx.write(2,1,"1234500001",format2);
            xlsx.write(2,2,"xxx件",format2);

            bool res = xlsx.saveAs(path);
            if(res)
                massage_dialog(1,"提示","新建code.xlsx文件成功!请打开新建文件填入被测装备编码和名称,已自动填入一行示例信息,可删除。",1,30);
            else
                massage_dialog(1,"提示","新建code.xlsx文件失败!",1,30);
        }
    });

在使用界面初始化,自动识别文本并给出响应

    QTimer *time1=new QTimer(this);
    connect(ui->lineEdit_code,&QLineEdit::textChanged,[=](){
        time1->start(200);
    });
    connect(time1,&QTimer::timeout,[=](){
        time1->stop();
        //设备编码识别
        QString path="../res/code.xlsx";
        QFile file(path);
        if(!file.exists()){
            //处理异常。。
        }
        else{
            QStringList code_nums;code_nums.clear();
            QStringList code_name;code_name.clear();
            QXlsx::Document xlsx(path);
            QXlsx::Workbook *workBook = xlsx.workbook();
            QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));
            ulong xlsxrows=workSheet->dimension().rowCount();//读取文件行数
            ulong xlsxcloums=workSheet->dimension().columnCount();//读取文件列数
            for (int i=1;i<=xlsxrows;i++){
                code_nums.append(workSheet->cellAt(i, 1)->value().toString());
                code_name.append(workSheet->cellAt(i, 2)->value().toString());
            }
            code_nums.removeFirst();//去掉第一行标题行
            code_name.removeFirst();//去掉第一行标题行
            xlsx.deleteLater();
//            qDebug()<<code_nums<<code_name;
            QString nowcode=ui->lineEdit_code->text();//当前编码
            bool havecode=false;//默认没有识别到编码
            for(int i=0;i<code_nums.size();i++){
                if(code_nums.at(i)==nowcode){
                    havecode=true;//识别到编码
                    ui->lineEdit_code->setText(code_name.at(i));
                    QTimer::singleShot(100,this,[=](){time1->stop();});//停止计时器,否则编码更改文本后又刷新一次
                }
            }
//                if(havecode)
//                    massage_dialog(1,"提示","编码识别成功!自动修改编码对应被测装备!",1);
//                else
//                    massage_dialog(1,"提示","编码识别失败!未找到扫描编码,请前往设置界面打开code.xlsx表格录入被测装备编码信息!",1);
        }
    });

大功告成,这样就实现了在200ms内输入完毕的编码,在200ms后会自动识别一次,如果没有时间限制,那么每一个字符输入整个文本都要被识别一次,会出现编码包含编码的编码无法被识别。

快去测试把。

四、结语

快去测试,早点休息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

YOLO-NAS:最高效的目标检测算法之一

YOLO-NAS目标检测 介绍 YOLO&#xff08;You Only Look Once&#xff09;是一种目标检测算法&#xff0c;它使用深度神经网络模型&#xff0c;特别是卷积神经网络&#xff0c;来实时检测和分类对象。该算法首次在2016年的论文《You Only Look Once&#xff1a;统一的实时目标检…

【Proteus仿真】【51单片机】拔河游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、动态数码管模块等。 主要功能&#xff1a; 系统运行后&#xff0c;指示灯处于中间位置&#xff0c;数码管显示得分0&#xff0c;当按下…

c++范围for语句

语法格式 for(declaration:expression)statement 基本使用 遍历输出 vector<int> nums { 1,2,3,4,5}; for (int num : nums) {num;cout << num << " "; } cout << endl; 遍历时修改 vector<int> nums { 1,2,3,4,5}; for (int&…

Android 布局优化,看过来 ~

屏幕刷新机制 基本概念 刷新率&#xff1a;屏幕每秒刷新的次数&#xff0c;单位是 Hz&#xff0c;例如 60Hz&#xff0c;刷新率取决于硬件的固定参数。帧率&#xff1a;GPU 在一秒内绘制操作的帧数&#xff0c;单位是 fps。Android 采用的是 60fps&#xff0c;即每秒 GPU 最多…

[文件读取]cuberite 文件读取 (CVE-2019-15516)

1.1漏洞描述 漏洞编号CVE-2019-15516漏洞类型文件上传漏洞等级⭐⭐⭐漏洞环境VULFOCUS攻击方式 描述: Cuberite是一款使用C语言编写的、轻量级、可扩展的多人游戏服务器。 Cuberite 2019-06-11之前版本中存在路径遍历漏洞。该漏洞源于网络系统或产品未能正确地过滤资源或文件路…

苍穹外卖项目笔记(1)

前言 苍穹外卖项目笔记附代码&#xff0c;贴上 github 链接&#xff0c;持续更新中&#xff1a;GitHub - Echo0701/sky-take-out &#xff08;不知道为啥发不了项目压缩包&#xff0c;那就下次再试试吧........&#xff09; 1 软件开发整体介绍 1.1 软件开发流程 1.2 角色分…

U-boot(一):Uboot命令和tftp

本文主要基于S5PV210探讨uboot。 uboot 部署&#xff1a;uboot(180~400K的裸机程序)在Flash(可上电读取)、OS在FLash(nand) 启动过程&#xff1a;上电后先执行uboot、uboot初始化DDR和Flash,将OS从Flash中读到DDR中启动OS,uboot结束 特点&#xff1a;…

MES系统如何改进生产管理?

伴随机械制造业行业竞争逐渐加剧&#xff0c;越来越多企业意识到MES系统的重要性&#xff0c;慢慢积极主动把握和实施MES系统。可是纵观绝大部分企业或者MES生产商&#xff0c;对MES的掌握依然存在比较大的分歧。 有一些人说MES系统是企业信息化构建的中枢神经&#xff0c;也有…

Oracle(2-3) Basic Oracle Net Server Side Configuration

文章目录 一、基础知识1、The Listener Process监听器进程2、Connection Methods 连接方法3、Spawn and Bequeath Conn4、Direct Hand-Off Connections 直接切换连接5、Redirection Session 重定向会话6、Simple to Complex:N-Tier 简单到复杂&#xff1a;N层7、Service Config…

SQL-LABS

less8 and 11-- 12 发现存在注入点 接下来我们会接着用联合查询 和以往的题目不一样没显错位&#xff0c;也就是没有报错的内容&#xff0c;尝试用盲注 布尔型 length&#xff08;&#xff09;返回长度 substr&#xff08;&#xff09;截取字符串&#xff08;语法substr&a…

【Linux】 ls -l 和 grep

语法:用于显示指定工作目录下之内容 ls [-alrtAFR] [name...]将 /bin 目录以下所有目录及文件详细资料列出: ls -lR /bin将 /usr/local/bin 目录以下所有有关python列出: ls -l /usr/local/bin/ | grep python在使用 ls -l 命令时&#xff0c;第一列的字符表示文件或目录的类…

计算机组成原理——指令系统题库21-40

21、假定指令地址码给出的是操作数的存储地址&#xff0c;则该操作数采用的是什么寻址。 A、 立即    B、 直接     C、 基址     D、 相对 22、寄存器间接寻址方式的操作数存储在什么中 A、 通用寄存器    B、 存储单元     C、 程序计数器     …

【C++】STL的基本用法

目录结构 1. STL概念 1.2 常见容器 1.3 六大组件 2. STL容器之vector 1. vector 2. 基本用法示例 3. STL容器之map 1. map 2. 基本用法示例 1. STL概念 C中的STL是指标准模板库的缩写。STL提供了一组通用的模板类和函数&#xff0c;用于实现常见的数据结构和算法&…

【C/C++底层】内存分配:栈区(Stack)与堆区(Heap)

/*** poject * author jUicE_g2R(qq:3406291309)* file 底层内存分配&#xff1a;栈区(Stack)与堆区(Heap)* * language C/C* EDA Base on MVS2022* editor Obsidian&#xff08;黑曜石笔记软件&#xff09;* * copyright 2023* COPYRIGHT …

图文示例:Python程序的运行原理解读

文章目录 一、编译型语言&#xff08;C语言为例&#xff09;二、动态型语言三、程序是如何运行起来的&#xff1f;四、分析五、dir 函数六、def 指令七、pyc文件1.pyc文件三大作用 八、import 指令总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三…

软件工程分析报告05体系结构说明书——基于Paddle的肝脏CT影像分割

基于Paddle的肝脏CT影像分割系统的体系结构说明书 目录 HIPO图 H图 Ipo图 软件结构图 面向数据流的体系结构设计图 程序流程图 S图 用PDL语言描述的伪代码 HIPO图 H图 Ipo图 软件结构图 面向数据流的体系结构设计图 程序流程图 S图 PAD图 用PDL语言描述的伪代码 (1)…

【Hello Go】初识Go语言

初识Go语言 Go语言介绍Go语言是什么Go语言优势Go语言能用来做什么 Go语言环境安装第一个GO语言程序运行Go语言程序 Go语言介绍 Go语言是什么 go语言是是Google开发的一种静态强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的编程语言. 静态类型&#xff1a;在静态类型…

【计算机网络】UDP协议

UDP的结构 我们学习一个协议最主要的就是理解它的报文格式&#xff0c;对于UDP协议来说 我们看下面的这张图。 16位UDP长度&#xff0c;表示整个数据报&#xff08;UDP首部UDP数据&#xff09;的最大长度。UDP报文长度占两个字节&#xff0c;16位表示的数据范围&#xff08;0-…

Java学习之路 —— Day3(内部类、枚举、泛型、API)

文章目录 1. 内部类2. 枚举3. 泛型 1. 内部类 成员内部类 就是类中的一个普通成员&#xff0c;类似普通的成员方法、成员变量。&#xff08;套娃&#xff09; public class Outer {public class Inner {private String name;public static String school;public String getNa…

爆火的迅雷网盘推广,一手云盘app拉新推广渠道必备项目 学习资料

迅雷网盘是目前几个主流网盘拉新推广之一 都可以通过”聚量推客“申请 目前主流的为&#xff1a;夸克网盘拉新、uc网盘推广、迅雷网盘&#xff0c;但是由于阿里的原因 夸克目前不对外开放名额&#xff0c;需要等待&#xff0c;取而代之主流的云盘推广就是迅雷网盘了 聚量推客…