Генератор QR-кодов на C++ с libqrencode и CQRcode

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

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

Начать курс

Генератор QR-кодов на C++: полное руководство

QR-коды стали неотъемлемой частью современного веба и мобильных приложений. Они используются для быстрого перехода по ссылкам, передачи контактных данных, оплаты и аутентификации. Если вы разрабатываете на C++ и нуждаетесь во встроенном генераторе QR-кодов — без внешних сервисов и API — эта статья для вас. Мы разберём две основные библиотеки: libqrencode (низкоуровневая, гибкая) и CQRcode (высокоуровневая, с выводом в PNG).

Зачем генерировать QR-коды на C++?

Основные сценарии использования:

  • Офлайн-генерация в десктопных приложениях (учёт товаров, билеты).
  • Встраивание в серверные решения на C++ (высокая производительность).
  • Работа с ограниченными ресурсами (встраиваемые системы, микроконтроллеры).
  • Полный контроль над процессом кодирования и коррекции ошибок.

Библиотека libqrencode

libqrencode — самая популярная C/C++ библиотека для создания QR-кодов. Она реализует стандарт ISO/IEC 18004, поддерживает все версии (1–40) и уровни коррекции ошибок (L, M, Q, H). Библиотека компактна, не требует зависимостей и работает на Linux, macOS и Windows (через MinGW или MSVC).

Установка

# Linux (Debian/Ubuntu)
sudo apt install libqrencode-dev

# macOS (Homebrew)
brew install libqrencode

# Windows (vcpkg)
vcpkg install libqrencode

Пример генерации QR-кода в массив байтов (черно-белое изображение)

#include <qrencode.h>
#include <iostream>
#include <vector>

int main() {
    // Создаём QR-код для строки "https://pythonlib.ru"
    QRcode *qr = QRcode_encodeString("https://pythonlib.ru", 0, QR_ECLEVEL_M, QR_MODE_8, 1);
    if (!qr) {
        std::cerr << "Ошибка создания QR-кода\n";
        return 1;
    }

    int width = qr->width;
    std::cout << "Размер QR-кода: " << width << "x" << width << "\n";

    // Данные: qr->data — массив байтов (0 или 1)
    for (int y = 0; y < width; ++y) {
        for (int x = 0; x < width; ++x) {
            bool black = (qr->data[y * width + x] & 0x01);
            std::cout << (black ? "██" : "  ");
        }
        std::cout << "\n";
    }

    QRcode_free(qr);
    return 0;
}

Этот код выводит QR-код в консоль символами. Для сохранения в PNG или BMP потребуется дополнительная обработка.

Библиотека CQRcode

CQRcode — надстройка над libqrencode, которая умеет сразу сохранять результат в PNG-файл. Идеально подходит, если вам нужен готовый графический файл без лишнего кода. Поддерживает настройку цвета, размера модуля и добавление центрального логотипа.

Установка

# Скачайте исходники с GitHub: https://github.com/rickyzhang82/CQRcode
# Сборка через CMake:
mkdir build && cd build
cmake ..
make
sudo make install

Пример сохранения QR-кода в PNG

#include <CQRcode.h>

int main() {
    // Создаём объект генератора
    CQRcode qr;
    
    // Устанавливаем данные (URL, текст или vCard)
    qr.setData("BEGIN:VCARD\nVERSION:3.0\nFN:PythonLib\nURL:https://pythonlib.ru\nEND:VCARD");
    
    // Настраиваем параметры
    qr.setModuleSize(8);            // размер одного модуля в пикселях
    qr.setMargin(4);                // отступ (белая рамка)
    qr.setCorrectionLevel(QR_ECLEVEL_H); // максимальная коррекция ошибок
    
    // Сохраняем в файл
    if (qr.savePNG("pythonlib_qr.png")) {
        // Успешно
    } else {
        // Ошибка
    }
    
    return 0;
}

Сравнение библиотек

  • libqrencode — минималистичная, даёт сырые данные. Требует

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