VS+QT——二维码生成(使用nayuki第三方库):从建工程开始

本文总结一下最近实现的小软件,二维码生成器。通过nayuki第三方库,生成一个QImage类型的二维码,再将二维码显示到对应控件上。本文参考博客:SorelCheung :Qt生成二维码

附代码:https://download.csdn.net/download/qq_28662831/11212049

先来看看实现后的效果:在文本框内输入二维码扫码内容,点击生成按钮,就可以生成对应二维码!


下面,正式开始实现这个软件。

一、建立一个普通的GUI工程

二、功能实现

  • 界面:

  • 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();
}

三、总结:

实现了二维码的生成与显示功能。

注意:本文代码有参考别人的博客,但是,解决问题的方法是自己写的。转载请说明出处。尊重劳动成果!

 

 

全部评论

相关推荐

Noob1024:一笔传三代,人走笔还在
点赞 评论 收藏
分享
字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务