Генерация QR-кодов на C++: библиотека QR-Code-generator

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Библиотека QR-Code-generator для C++: полное руководство

QR-коды стали неотъемлемой частью современного цифрового мира. Они используются в рекламе, логистике, платежных системах и даже в образовательных проектах. Если вы разрабатываете приложение на C++ и хотите добавить функционал генерации QR-кодов, библиотека QR-Code-generator — это простой, легкий и эффективный инструмент. В этой статье мы подробно разберем, что это за библиотека, как её установить, и покажем рабочие примеры кода.

Что такое QR-Code-generator?

QR-Code-generator — это кроссплатформенная библиотека на C++ (также доступна на C, Python, Java), которая позволяет создавать QR-коды различных версий и уровней коррекции ошибок. Основные преимущества:

  • Не требует внешних зависимостей (работает «из коробки»).
  • Поддерживает все 40 версий QR-кодов (от 21×21 до 177×177 модулей).
  • Уровни коррекции ошибок: L (7%), M (15%), Q (25%), H (30%).
  • Вывод в виде строки (char*) или бинарного массива.
  • Поддержка Unicode (UTF-8) и числовых/буквенных режимов.

Библиотека идеально подходит для встраивания в серверные приложения, утилиты командной строки или образовательные проекты на C++.

Установка и подключение

Установка максимально проста. Вы можете скачать исходники с GitHub-репозитория Nayuki или использовать менеджер пакетов (например, vcpkg). Рассмотрим ручной способ:

  1. Скачайте файлы qrcodegen.hpp и qrcodegen.cpp.
  2. Поместите их в папку вашего проекта.
  3. Подключите заголовочный файл в коде: #include "qrcodegen.hpp".
  4. Скомпилируйте проект с флагом -std=c++11 или выше.

Пример компиляции через g++:

g++ -std=c++11 main.cpp qrcodegen.cpp -o qr_generator

Основные функции API

Библиотека предоставляет минималистичный, но мощный API. Основные функции:

  • qrcodegen::QrCode::encodeText(text, ecl) — кодирует строку текста в QR-код с заданным уровнем коррекции.
  • qrcodegen::QrCode::encodeBinary(data, ecl) — кодирует бинарные данные.
  • getSize() — возвращает размер QR-кода (количество модулей по ширине).
  • getModule(x, y) — проверяет, установлен ли модуль (пиксель) в координатах (x, y).

Пример 1: Генерация QR-кода и вывод в консоль

Самый простой пример — создать QR-код для текстовой строки и вывести его в виде ASCII-графики. Этот код полезен для отладки или демонстрации в терминале.

#include <iostream>
#include <string>
#include "qrcodegen.hpp"

using namespace std;
using namespace qrcodegen;

int main() {
    // Создаем QR-код для текста с уровнем коррекции H (30%)
    const QrCode qr = QrCode::encodeText("https://pythonlib.ru", QrCode::Ecc::HIGH);
    
    // Выводим QR-код в консоль (символы █ и пробел)
    for (int y = 0; y < qr.getSize(); y++) {
        for (int x = 0; x < qr.getSize(); x++) {
            cout << (qr.getModule(x, y) ? "██" : "  ");
        }
        cout << endl;
    }
    return 0;
}

Результат: В консоли отобразится QR-код, который можно отсканировать любым смартфоном. Уровень H обеспечивает максимальную устойчивость к повреждениям.

Пример 2: Создание QR-кода с бинарными данными

Иногда нужно закодировать не текст, а произвольные байты (например, сериализованные данные). Используйте encodeBinary.

#include <vector>
#include "qrcodegen.hpp"

using namespace qrcodegen;

int main() {
    // Подготавливаем бинарные данные (массив байт)
    std::vector<uint8                    

Рекомендаций