VS+QT——二维码生成(使用nayuki第三方库):从建工程开始
本文总结一下最近实现的小软件,二维码生成器。通过nayuki第三方库,生成一个QImage类型的二维码,再将二维码显示到对应控件上。本文参考博客:SorelCheung :Qt生成二维码。
附代码:https://download.csdn.net/download/qq_28662831/11212049
先来看看实现后的效果:在文本框内输入二维码扫码内容,点击生成按钮,就可以生成对应二维码!
下面,正式开始实现这个软件。
一、建立一个普通的GUI工程
- 工程的建立以前文章已经写过了,《VS+QT——读写XML文件(含中文字符):从建工程开始》
- 将第三方库文件:
BitBuffer.hpp、BitBuffer.cpp、QrCode.hpp、QrCode.cpp、QrSegment.hpp和QrSegment.cpp复制
到工程根目录下,并添加到工程里。
二、功能实现
-
界面:
- 1. 放置控件,并简单布局:
-
代码:
- 1. TestForQRCode.h文件
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_TestForQRCode.h"
#include <QImage>
#include <QDebug>
#include "QrCode.hpp"
class TestForQRCode : public QMainWindow
{
Q_OBJECT
public:
TestForQRCode(QWidget *parent = Q_NULLPTR);
//QString asciiQR(const QString& data, QString on = "█", QString off = " ");
public:
void GenerateAndShowQRCodeImage();
private:
Ui::TestForQRCodeClass ui;
public slots:
void button_Clicked();
};
- 2. TestForQRCode.cpp文件
#include "TestForQRCode.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
TestForQRCode::TestForQRCode(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
setWindowTitle(QStringLiteral("二维码生成器"));
}
void TestForQRCode::GenerateAndShowQRCodeImage()
{
QString data = ui.textEdit->toPlainText();
qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(data.toUtf8().constData(), qrcodegen::QrCode::Ecc::LOW);
const int s = qr.getSize() > 0 ? qr.getSize() : 1;//大小由data而定
QImage image(s, s, QImage::Format_RGB888);//局部变量,匿名对象扶正,用匿名对象去初始化,而不是赋值(=)。
image.fill(QColor(Qt::white).rgb());
for (int y = 0; y < s; y++) {
for (int x = 0; x < s; x++) {
/*
bool getModule(int x, int y)
返回给定坐标下模块(像素)的颜色,白色为false,黑色为true。左上角有坐标(x=0, y=0)。如果给定的坐标超出界限,则返回false(白色)。
*/
const int color = qr.getModule(x, y); // 0 for white, 1 for black
if (0 != color)
{
image.setPixelColor(x, y, QColor(Qt::black));
}
}
}
//显示图片
ui.qrCodeLabel->setScaledContents(true);
QSize resize = ui.qrCodeLabel->rect().size();
ui.qrCodeLabel->setPixmap(QPixmap::fromImage(image).scaled(resize));
}
void TestForQRCode::button_Clicked()
{
GenerateAndShowQRCodeImage();
}
三、总结:
实现了二维码的生成与显示功能。
注意:本文代码有参考别人的博客,但是,解决问题的方法是自己写的。转载请说明出处。尊重劳动成果!