第一次发现,C++ 生成 二维码竟然如此简单哟!~ui
/** * @deprecated */ extern _declspec(deprecated) void QRcode_clearCache(void);
#define MAX_URI_LENGTH 255 #define QR_IMAGE_SIZE 300 void QtGuiApplication1::update() { ui.lblQRCode->setText(""); QString uri = "123456"; if (!uri.isEmpty()) { // limit URI length if (uri.length() > MAX_URI_LENGTH) { ui.lblQRCode->setText(tr("Resulting URI too long, try to reduce the text for label / message.")); } else { QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1); if (!code) { ui.lblQRCode->setText(tr("Error encoding URI into QR Code.")); return; } QImage qrImage = QImage(code->width + 8, code->width + 8, QImage::Format_RGB32); qrImage.fill(0xffffff); unsigned char *p = code->data; for (int y = 0; y < code->width; y++) { for (int x = 0; x < code->width; x++) { qrImage.setPixel(x + 4, y + 4, ((*p & 1) ? 0x0 : 0xffffff)); p++; } } QRcode_free(code); QImage qrAddrImage = QImage(QR_IMAGE_SIZE, QR_IMAGE_SIZE + 20, QImage::Format_RGB32); qrAddrImage.fill(0xffffff); QPainter painter(&qrAddrImage); painter.drawImage(0, 0, qrImage.scaled(QR_IMAGE_SIZE, QR_IMAGE_SIZE)); QFont font("宋体", 10, QFont::Bold, true); font.setPixelSize(12); painter.setFont(font); QRect paddedRect = qrAddrImage.rect(); paddedRect.setHeight(QR_IMAGE_SIZE + 12); painter.drawText(paddedRect, Qt::AlignBottom | Qt::AlignCenter,uri); painter.end(); ui.lblQRCode->setPixmap(QPixmap::fromImage(qrAddrImage)); } } }