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

三、总结:

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

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

 

 

全部评论

相关推荐

06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务