Qt实现 二维码打印功能
1,利用 qrencode 第三方库 生成二维码,并通过Qt printer调用打印机 打印条码 或者二维码。
2,经过和同事几天的研究,浪费了一筐 条码之后。终于实现了基本功能,一些关键细节分享出来。
(1),打印机设置,颜色模式,纸张单位,大小,分辨率,边距,水平还是垂直。
此处 分辨率为 打印机固有属性,可通过windows驱动查看。
mPrinter->setColorMode(QPrinter::GrayScale);
mPrinter->setPageSizeMM(QSizeF(49.8,35.0)); //大小
mPrinter->setPaperSize(QSizeF(49.8,35), QPrinter::Millimeter);
mPrinter->setResolution(300);//分辨率 203
mPrinter->setPageMargins(0,0,0,0, QPrinter::Millimeter);
mPrinter->setOrientation(QPrinter::Portrait);
mPrinter->setFullPage(true);
(2),二维码设置
开始模式,纠错等级,版本。二维码相关属性可 百度搜索。
mode = MODE_8;
level = LEVEL_L;//LEVEL_Q;//纠错
foreground = QColor("black");
background = QColor("white");
casesen=true;
mPrinter = new QPrinter(QPrinter::PrinterResolution);
(3),打印文字
此处 double MmToDot =12 为上述 分辨率 也即是300/24.5 得出的结果,表示 没英寸多少个点。我们在计算文字位置的时候 最好用毫米,而
QRect 内所需的参数为像素点,换算成毫米 就要乘以一个系数。
double MmToDot =12 ;//分辨率/24.5MM 每毫米多少像素点 。
QPainter painter(mPrinter);
//文字 x:3mm y:27mm 宽:28mm 高:4mm
double codeTextX=0*MmToDot;
double codeTextY=24*MmToDot;
double codeTextW=28*MmToDot;
double codeTextH=4*MmToDot;
QRect codeTextRect = QRect(codeTextX,codeTextY,codeTextW,codeTextH);
painter.setFont(QFont("Microsoft YaHei", 8, QFont::Normal));
painter.drawText(codeTextRect, Qt::AlignCenter, codeText);
(4),打印 二维码
//二维码图片 x:42mm y:17mm 宽::14MM 高:14mm
double qrcodeX =35*MmToDot;
double qrcodeY =17*MmToDot;
double qrcodeW =10*MmToDot;
double qrcodeH =10*MmToDot;
//ver 1 版本越高,意味着存储的内容越多,纠错能力也越强
QRcode *qrcode = QRcode_encodeString(codeText.toStdString().c_str(), 1, (QRecLevel)level, (QRencodeMode)mode, casesen ? 1 : 0);
int margin=0;
if(0 != qrcode)
{
unsigned char *point = qrcode->data;
painter.setPen(Qt::NoPen);
painter.setBrush(this->background);
painter.drawRect(qrcodeX,qrcodeY, qrcodeW, qrcodeH);
double scale = (qrcodeW - 2.0 * margin) / qrcode->width;
painter.setBrush(this->foreground);
for (int y = 0; y < qrcode->width; y ++) {
for (int x = 0; x < qrcode->width; x ++) {
if (*point & 1) {
QRectF r(margin + x * scale+qrcodeX, margin + y * scale+qrcodeY, scale, scale);
painter.drawRects(&r, 1);
}
point ++;
}
}
point = NULL;
QRcode_free(qrcode);
}
qrcode = NULL;
(5),打印条码
QFont barcodefont = QFont("Code 128", 46, QFont::Normal);
barcodefont.setLetterSpacing(QFont::AbsoluteSpacing,0.0);
painter.setFont(barcodefont);
QString arr = encodeBarcode(codeText);
painter.drawText(barcodeRect, Qt::AlignCenter, arr);
(6),上述 实现之后,可实现 条码 或二维码 与文字的打印,并可以毫米为单位 进行位置的调整。但是打印出来的效果特别模糊,经过又一筐条码的浪费,终于找到了问题所在。打印机的 浓度 和速度。将速度调低、将浓度 增大
控制面板-》打印机-》右键 -》打印机首选项
代码: http://download.csdn.net/download/weixin_38416696/10248658
Qt实现 二维码打印功能相关推荐
- 使用Qt绘制二维码 QRcode
--今天的我们,是站在巨人的肩膀上前行. 二维码自从出现以来,已经极大地改变了我们的生活方式,它能容纳一些简短的信息,却又不那么简短,以至于很多场合都能使用二维码作为信息的载体.一个月以前,有个老师跟 ...
- 二维码打印-非EXCEL控件和非SmartForm方式
项目遇到奇葩问题,优化工票打印增加二维码的功能时发现用户的电脑不支持EXCEL的二维码控件,但是二维码是车间MES APP 派工的必要条件而且现在的打印程序已经是EXCEL打印,excel模板有四个s ...
- [原创]解决某物流企业二维码打印问题
[原创]解决某物流企业二维码打印问题 参考文章: (1)[原创]解决某物流企业二维码打印问题 (2)https://www.cnblogs.com/ruochen/archive/2012/06/28 ...
- iOS 自带二维码扫描功能的实现
#自从iOS7以后中新增了二维码扫描功能.因此可以在不借助第三方类库的情况下简单的写出二维码的扫描功能: 原生的二维码扫描功能在AVFoundation框架下,所以在使用原生的二维码扫描功能时要先导入 ...
- java生成二维码打印到浏览器
java生成二维码打印到浏览器 解决方法: pom.xml的依赖两个jar包: <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...
- 基于MUI框架的使用HTML5+实现的二维码扫描功能
Barcode的一个实现案例 一.简介 Barco ...
- 【MAUI】条形码,二维码扫描功能
前言 本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能. 介绍 移动端的扫描条形码.二维码的功能已经随处可见,已经很难找到一个不支持扫 ...
- 【Android】实现生成二维码、条形码和扫描二维码的功能
目录 一.添加依赖 二.布局文件 三.实现生成二维码的功能 四.效果图 一.添加依赖 要先添加一个第三方库来实现二维码的生成以及扫描二维码的功能,开源库如下: 在build.grade(Moudle) ...
- chroom浏览器网页二维码生成功能的方法
谷歌浏览器二维码生成功能 在没有二维码的时候,我们如果要将电脑网页端的内容分享到移动端时,通常会复制内容,然后在粘贴到第三方通讯工具(微信.QQ)上发送给手机 其实早在Chrome85桌面端就上线网页 ...
最新文章
- 白酒院士后,山东黄金董事长也入围院士?曾获国家科技进步二等奖
- .net采集网页方法大全(5种)
- nginx自签SSL证书和Symantec签发证书使用
- sql server 常用的扩展存储过程
- 根据浏览器navigator区分PC端还是移动端,区分操作系统,区分浏览器型号
- 委托、Lambda表达式、事件系列07,使用EventHandler委托
- js生成带log的二维码(qrcodejs)
- wince 播放器 最终版本
- 最新iOS面试题:APP性能优化(①系列更新)
- Tesseract-OCR识别 学习(一)命令识别
- 【012】Excel宏编程相关封装模块(删除行/列、隐藏列、合并单元格)_005_#VBA
- html 文字阴影 一重投影,鼠标移入文字添加阴影 溢出的文字 添加多重颜色
- docker配置python环境_安装docker及在docker中安装python环境学
- 【思想感悟】站在巨人的肩膀上
- 社会工程学之从微信取名看性格
- golang基础面试题总结
- 超级推荐:网工必备模拟器PNETLab,附下载链接,全球第一篇最优质的帖子
- 广告行业中那些趣事系列51:超牛的kaggle比赛Favorita Grocery Sales Forecasting冠军方案...
- Android Wifi自动打开并连接
- C语言- 循环打印 for循环例子(判断奇偶数) 第四讲