Generación de códigos QR en C++: biblioteca QR-Code-generator

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca QR-Code-generator para C++: guía completa

\n\n

Los códigos QR se han convertido en una parte esencial del mundo digital moderno. Se utilizan en publicidad, logística, sistemas de pago e incluso en proyectos educativos. Si estás desarrollando una aplicación en C++ y deseas agregar funcionalidad de generación de códigos QR, la biblioteca QR-Code-generator es una herramienta simple, ligera y eficiente. En este artículo, analizaremos en detalle qué es esta biblioteca, cómo instalarla y mostraremos ejemplos de código funcionales.

\n\n

¿Qué es QR-Code-generator?

\n

QR-Code-generator es una biblioteca multiplataforma en C++ (también disponible en C, Python, Java) que permite crear códigos QR de varias versiones y niveles de corrección de errores. Las principales ventajas son:

\n
    \n
  • No requiere dependencias externas (funciona "listo para usar").
  • \n
  • Admite las 40 versiones de códigos QR (de 21×21 a 177×177 módulos).
  • \n
  • Niveles de corrección de errores: L (7%), M (15%), Q (25%), H (30%).
  • \n
  • Salida como cadena (char*) o matriz binaria.
  • \n
  • Soporte para Unicode (UTF-8) y modos numérico/alfabético.
  • \n
\n

La biblioteca es ideal para integrarse en aplicaciones de servidor, utilidades de línea de comandos o proyectos educativos en C++.

\n\n

Instalación y configuración

\n

La instalación es extremadamente simple. Puedes descargar los archivos fuente desde el repositorio de GitHub de Nayuki o usar un gestor de paquetes (por ejemplo, vcpkg). Veamos el método manual:

\n
    \n
  1. Descarga los archivos qrcodegen.hpp y qrcodegen.cpp.
  2. \n
  3. Colócalos en la carpeta de tu proyecto.
  4. \n
  5. Incluye el archivo de cabecera en tu código: #include "qrcodegen.hpp".
  6. \n
  7. Compila el proyecto con la bandera -std=c++11 o superior.
  8. \n
\n

Ejemplo de compilación con g++:

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

Funciones principales de la API

\n

La biblioteca proporciona una API minimalista pero potente. Las funciones principales son:

\n
    \n
  • qrcodegen::QrCode::encodeText(text, ecl) — codifica una cadena de texto en un código QR con el nivel de corrección especificado.
  • \n
  • qrcodegen::QrCode::encodeBinary(data, ecl) — codifica datos binarios.
  • \n
  • getSize() — devuelve el tamaño del código QR (número de módulos de ancho).
  • \n
  • getModule(x, y) — verifica si el módulo (píxel) en las coordenadas (x, y) está activo.
  • \n
\n\n

Ejemplo 1: Generación de código QR y salida en consola

\n

El ejemplo más simple: crear un código QR para una cadena de texto y mostrarlo como gráfico ASCII. Este código es útil para depuración o demostración en la terminal.

\n
#include <iostream>\n#include <string>\n#include "qrcodegen.hpp"\n\nusing namespace std;\nusing namespace qrcodegen;\n\nint main() {\n    // Creamos un código QR para el texto con nivel de corrección H (30%)\n    const QrCode qr = QrCode::encodeText("https://pythonlib.ru", QrCode::Ecc::HIGH);\n    \n    // Mostramos el código QR en la consola (caracteres █ y espacio)\n    for (int y = 0; y < qr.getSize(); y++) {\n        for (int x = 0; x < qr.getSize(); x++) {\n            cout << (qr.getModule(x, y) ? "██" : "  ");\n        }\n        cout << endl;\n    }\n    return 0;\n}
\n

Resultado: En la consola se mostrará un código QR que se puede escanear con cualquier teléfono inteligente. El nivel H proporciona la máxima resistencia a daños.

\n\n

Ejemplo 2: Creación de un código QR con datos binarios

\n

A veces es necesario codificar no texto, sino bytes arbitrarios (por ejemplo, datos serializados). Use encodeBinary.

\n
#include <vector>\n#include "qrcodegen.hpp"\n\nusing namespace qrcodegen;\n\nint main() {\n    // Preparamos datos binarios (arreglo de bytes)\n    std::vector<uint8                    

Recommendations