您的位置:首页 > 财经 > 产业 > 婚纱摄影网站图片_广告设计公司需要资质吗_关键词优化多少钱_怎么注册域名网址

婚纱摄影网站图片_广告设计公司需要资质吗_关键词优化多少钱_怎么注册域名网址

2024/11/16 10:33:57 来源:https://blog.csdn.net/qq_35554617/article/details/143056473  浏览:    关键词:婚纱摄影网站图片_广告设计公司需要资质吗_关键词优化多少钱_怎么注册域名网址
婚纱摄影网站图片_广告设计公司需要资质吗_关键词优化多少钱_怎么注册域名网址

目录导读

  • 前言
  • 使用Code128生成简单条形码
  • 使用QRencode库生成二维码
    • 添加QRencode.Pri 模块化

前言

对在QT开发中使用QRencode库生成二维码
和使用Code128生成简单条形码
进行一个学习使用总结。


使用Code128生成简单条形码

‌Code128条形码是一种高密度条码,广泛应用于企业内部管理、生产流程和物流控制系统中。‌ 它能够表示从ASCII 0到ASCII 127共128个字符,包括数字、字母和符号‌1。
‌Code128条形码由六部分组成:空白区域、起始标记、数据区、校验符、终止符和另一个空白区域‌2。每个字符由一个条开始,以一个空结束,通常最后一个条形与终止符组合成一个更宽的终止符‌

示例中的Code128条形码生成,是直接使用的GitHub上的promixis/Code128项目源码文件,
直接添加Code128.h Code128.cpp文件到项目中,
如果是 MSCV编译器,还需要修改类中Symbol类型为:
typedef QString Symbol;
在这里插入图片描述
然后直接调用就行。

  • 示例代码:

固定长宽为[200,80],直接在QImage类中绘制。

#include "code128.h"
#include <QImage>
#include <QPainter>void MainWindow::on_pushButton_clicked()
{QString str=ui->lineEdit->text();if (str.isEmpty())return;float m_Width=200;float m_Height=80;float m_CodeLength;Code128::BarCode m_Code = Code128::encode(str);m_CodeLength = 0;for (int i=0;i<m_Code.length();i++){m_CodeLength+=m_Code[i];}//! 平均间隔float lineWidth = m_Width / m_CodeLength;QImage  m_img = QImage(m_Width, m_Height, QImage::Format_ARGB32);QPainter painter(&m_img);painter.setBrush(Qt::white);   // 设置白色笔刷painter.setPen(Qt::NoPen);painter.drawRect(QRectF(0, 0, m_Width, m_Height));   // 绘制w x w的白色背景painter.setBrush(Qt::black);    // 设置黑色笔刷用于绘制方块float left = 0;for (int i=0;i<m_Code.length();i++){float width = m_Code[i] * lineWidth;if ( i % 2 == 0 ){QRectF bar(left, 0, width, m_Height );painter.fillRect(bar, Qt::SolidPattern);}left+= width;}ui->label->setPixmap(QPixmap::fromImage(m_img));
}
  • 界面示例:

在这里插入图片描述
通过手机微信的条形码识别中心识别到123456abcd

  • Code128不支持中文内容 :

‌Code128不支持中文。‌ Code128是由Computer Identics Corporation在1981年研制的,它支持全部128个ASCII码字符,包括数字、大写和小写字母以及一些特殊字符,但并不包括中文字符‌12。
‌Code128的字符集包括数字、大写和小写字母以及一些特殊字符,具体来说,Code128有A、B、C三种字符集,每种字符集支持不同的字符范围。A字符集支持大写字母、数字和一些特殊字符;B字符集支持大小写字母、数字和一些特殊字符;C字符集仅支持数字,且必须是偶数位,不足时前面补零‌

Code128不支持中文内容,实际上包含中文后再通过手机微信的条形码识别中心识别,也只获取到中文后面的内容:
在这里插入图片描述
只获取到: 9527123456

Code128只能生成简单的条形码,如果需要生成其他类型的条形码建议参考:
Qt 中利用 GNU barcode 生成一维条形码
Qt 二维码生成与识别库:QZXing 的编译与使用


使用QRencode库生成二维码

qrencode-4.1.1
源码下载地址:https://fukuchi.org/works/qrencode/

‌qrencode库是一个用于生成QR码的开源库,支持多种编程语言的接口,包括C、C++、Python等。‌ QR码是一种矩阵式二维码,广泛应用于存储网址、联系信息、文字信息等场景,具有容量大、可靠性高、保密防伪性强等特点‌
‌QR码的容量可达7000位或4000个字符,具有很高的鲁棒性‌23。
‌多平台支持‌:qrencode库适用于多个平台,包括Windows、Linux等,并且可以在命令行实用程序中输出各种格式的QR码图像‌
出自:文言一心

本文对于QRencode库的使用完全参照:
Qt-qrencode开发-生成二维码📀中的示例内容,
唯一不同的是我选择通过.Pri 模块化设计的方式将源码包含到项目中。

添加QRencode.Pri 模块化

以QRencode.Pri的方式添加与 Qt-qrencode开发-生成二维码::在Qt中直接使用QRencode源码差不多,只是将pro文件改为了Pri文件:

  • 删除多余文件:

qrencode-4.1.1文件夹中除了 .h、.c、config.h.in外的文件删除,
文件夹也删除,
qrenc.c也删除,
config.h.in重命名为 config.h

在这里插入图片描述

  • 修改config.h文件:

同样将以下宏定义

/* Major version number */
#undef MAJOR_VERSION
/* Micro version number */
#undef MICRO_VERSION
/* Minor version number */
#undef MINOR_VERSION
/* Version number of package */
#undef VERSION

修改为:

/* Major version number */
#define MAJOR_VERSION 4
/* Micro version number */
#define  MICRO_VERSION 1
/* Minor version number */
#define  MINOR_VERSION 1
/* Version number of package */
#define VERSION "4.1.1"
  • 添加到.Pri目录中:

在qrencode-4.1.1文件夹 同级目录中
创建一个txt文本文件,修改文件后缀和名称为QRencode.pri
写入所有文件目录路径

DEFINES += HAVE_CONFIG_H
HEADERS += \$$PWD/bitstream.h \$$PWD/config.h \$$PWD/mask.h \$$PWD/mmask.h \$$PWD/mqrspec.h \$$PWD/qrencode.h \$$PWD/qrencode_inner.h \$$PWD/qrinput.h \$$PWD/qrspec.h \$$PWD/rsecc.h \$$PWD/split.hSOURCES += \$$PWD/bitstream.c \$$PWD/mask.c \$$PWD/mmask.c \$$PWD/mqrspec.c \$$PWD/qrencode.c \$$PWD/qrinput.c \$$PWD/qrspec.c \$$PWD/rsecc.c \$$PWD/split.c

修改qrencode-4.1.1文件夹 名称为QRencode
复制整个文件夹到Pro项目目录下
在Pro文件中添加
#附加QRencode源码
include(QRencode/QRencode.pri)

如下图示:

在这里插入图片描述

  • 代码调用示例:

同样是绘制到QImage上,然后赋值给控件显示

#include <QDebug>
#include <QImage>
#include <QPainter>
#include <QPixmap>
#include "QRencode/qrencode.h"void MainWindow::on_pushButton_clicked()
{QString str=ui->lineEdit->text();if (str.isEmpty())return;QRcode* qrcode = QRcode_encodeString(str.toStdString().data(), 2, QR_ECLEVEL_Q, QR_MODE_8, 1);if (!qrcode)   // 错误返回null{qInfo() << errno;   // 打印错误码return;}int w = qMin(ui->label->width(), ui->label->height());   // 控件长宽的最小值,保证绘制完整正方形int qrcodeW = qMax(qrcode->width, 1);qreal size = w / qreal(qrcodeW);   // 二维码小格子的长宽QImage  m_img = QImage(w, w, QImage::Format_ARGB32);QPainter painter(&m_img);painter.setBrush(Qt::white);   // 设置白色笔刷painter.setPen(Qt::NoPen);painter.drawRect(0, 0, w, w);   // 绘制w x w的白色背景painter.setBrush(Qt::black);    // 设置黑色笔刷用于绘制方块for (qint32 y = 0; y < qrcodeW; y++){for (qint32 x = 0; x < qrcodeW; x++){unsigned char b = qrcode->data[(y * qrcodeW) + x];if (b & 0x01)   // 1=黑、0=白{QRectF rect(x * size, y * size, size, size);painter.drawRect(rect);   // 绘制黑色格子}}}delete qrcode;qrcode = nullptr;ui->label->setPixmap(QPixmap::fromImage(m_img));
}
  • 界面示例:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com