qt 使用qrencode 产生二维码

https://github.com/lwlg/QtDemo.git

 

开发环境:QT5.5.1

二维码库 qrencode-3.4.4

1 文件目录结构

qt 使用qrencode 产生二维码_第1张图片

2 pri文件如下 

INCLUDEPATH += $$PWD/qrencode/


DEFINES += HAVE_CONFIG_H   #qrencode used

SOURCES += \
    $$PWD/qrencode/bitstream.c \
    $$PWD/qrencode/mask.c \
    $$PWD/qrencode/mmask.c \
    $$PWD/qrencode/mqrspec.c \
    $$PWD/qrencode/qrencode.c \
    $$PWD/qrencode/qrinput.c \
    $$PWD/qrencode/qrspec.c \
    $$PWD/qrencode/rscode.c \
    $$PWD/qrencode/split.c



HEADERS  += \
    $$PWD/qrencode/bitstream.h \
    $$PWD/qrencode/config.h \
    $$PWD/qrencode/mask.h \
    $$PWD/qrencode/mmask.h \
    $$PWD/qrencode/mqrspec.h \
    $$PWD/qrencode/qrencode.h \
    $$PWD/qrencode/qrencode_inner.h \
    $$PWD/qrencode/qrinput.h \
    $$PWD/qrencode/qrspec.h \
    $$PWD/qrencode/rscode.h \
    $$PWD/qrencode/split.h

3 主要代码

QPixmap QRHelper::generateQR(QString strContent ,int width,int height)
{
    //[1]
    QPixmap GenQRPixmap;
    QRcode *qrcode; //二维码数据
    qrcode  = QRcode_encodeString(strContent.toStdString().c_str(),2,QR_ECLEVEL_Q,QR_MODE_8,1);

    qint32 qrcode_width = qrcode->width > 0 ? qrcode->width : 1;

    //[2]
    double scale_x = (double)width / (double)qrcode_width; //二维码图片的缩放比例
    double scale_y =(double) height /(double) qrcode_width;
    QImage qrImg = QImage(width, height, QImage::Format_ARGB32);

    QPainter painter(&qrImg);
    QColor background(Qt::white);
    painter.setBrush(background);
    painter.setPen(Qt::NoPen);
    painter.drawRect(0, 0, width, height);
    QColor foreground(Qt::black);
    painter.setBrush(foreground);

    for( qint32 y = 0; y < qrcode_width; y ++)
    {
        for(qint32 x = 0; x < qrcode_width; x++)
        {
            unsigned char b = qrcode->data[y * qrcode_width + x];
            if(b & 0x01)
            {
                QRectF r(x * scale_x, y * scale_y, scale_x, scale_y);
                painter.drawRects(&r, 1);
            }
        }
    }

    //[3]
    GenQRPixmap = QPixmap::fromImage(qrImg);

    return GenQRPixmap;
}

void MainWindow::on_pushButton_clicked()
{
    QPixmap showImg = qrHelper.generateQR("阿里贝贝");
    ui->label->setPixmap(showImg);
    ui->label->adjustSize();
    this->adjustSize();
}

4 截图

qt 使用qrencode 产生二维码_第2张图片

 

你可能感兴趣的:(qt 使用qrencode 产生二维码)