开发环境:QT5.5.1
二维码库 qrencode-3.4.4
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 截图