里飞网

 找回密码
 立即注册
查看: 4104|回复: 1

QT二维码,可直接使用

[复制链接]

45

主题

288

帖子

2474

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2474
发表于 2019-11-11 14:25:05 | 显示全部楼层 |阅读模式
本帖最后由 阿里兄 于 2021-12-28 14:50 编辑

1、qr.pri添加到pro工程。
  1. include     ($PWD/qr/qr.pri)

  2. INCLUDEPATH += $PWD/qr
复制代码
新的QT可能需要换一种添加方法(如下):
  1. include     (./qr/qr.pri)
  2. INCLUDEPATH += ./qr
复制代码


2、pro工程增加宏定义。
  1. DEFINES += HAVE_CONFIG_H
复制代码
3、UI界面拖入widget控件,并提升为QRWidget
QRWidget提升.png
4、直接使用有QRWidget里的函数setString即可。
qrencode.png

修正不居中显示问题。

qr.zip (44.98 KB, 下载次数: 573)
回复

使用道具 举报

45

主题

288

帖子

2474

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2474
 楼主| 发表于 2020-5-11 08:54:40 | 显示全部楼层
有一个小BUG,画的二维码没有居中显示,修改qrwidget.cpp文件里面的void QRWidget::draw(QPainter &painter, int width, int height)函数,修改如下
  1. void QRWidget::draw(QPainter &painter, int width, int height)
  2. {
  3.     QColor foreground(Qt::black);
  4.     painter.setBrush(foreground);
  5.     const int qr_width = qr->width > 0 ? qr->width : 1;
  6.     double scale_x = width / qr_width;
  7.     double scale_y = height / qr_width;

  8.     int sx = (width-qr_width*scale_x)/2;
  9.     int sy = (height-qr_width*scale_y)/2;
  10.     for( int y = 0; y < qr_width; y ++)
  11.     {
  12.         for(int x = 0; x < qr_width; x++)
  13.         {
  14.             unsigned char b = qr->data[y * qr_width + x];
  15.             if(b & 0x01)
  16.             {
  17.                 QRectF r(x * scale_x+sx, y * scale_y+sy, scale_x, scale_y);
  18.                 painter.drawRects(&r, 1);
  19.             }
  20.         }
  21.     }
  22. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|里飞网  

GMT+8, 2024-4-18 09:28 , Processed in 0.082929 second(s), 5 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表