libqrcode is C++20 header-only library for generating QR/Micro QR Codes.
Features include:
- Header-only library
- Completely constexpr
- Code is (unit-)tested with
static_asserts
during compile-time - Utilizes standard library only
- Uses C++20 Ranges
- No C++ exceptions (however)
- Supports Conan package manager
Supported:
- Versions: 1-40
- Error correction levels: L, M, Q, H
- Encodings: Numeric, alphanumeric, byte and kanji
- ECI mode (Enhanced channel interpretation)
- (Simple) Bit stream optimization
Not supported
- Structured append mode
- FNC1 mode
Supported:
- Versions: M1-M4
- Error correction levels: L, M, Q (where possible)
- Encodings: Numeric, alphanumeric, byte and kanji encoding (where possible)
One can either use the conan recipe provided in this repository or directly integrate the library into your project. As this libary is header-only, it should be quite easy to setup. Add the libqrcode include directory to your project's header search path
In your project, just in include the header qrcode/qrcode.h
.
Micro QR api is located within namespace micro_qr
.
QR api is located within namespace qr
.
#include <qrcode/qrcode.h>
int main()
{
using namespace qrcode;
auto qr_symbol = qr::make_symbol("Foo!", qr::error_correction::level_H);
auto micro_qr_symbol = micro_qr::make_symbol("Bar!", micro_qr::error_correction::level_L);
}
#include <qrcode/qrcode.h>
int main()
{
using namespace qrcode;
using namespace std::literals;
auto symbol = qr::make_symbol(
eci::view{eci::assignment_number{9}, "\xC1\xC2\xC3\xC4\xC5"sv},
qr::error_correction::level_H);
}
#include <qrcode/qrcode.h>
#include <iostream>
int main()
{
using namespace qrcode;
using namespace std::literals;
auto symbol = qr::make_symbol("Hello World!"sv, qr::error_correction::level_L).value();
auto count = 0;
for (auto i : views::horizontal(symbol))
{
std::cout << (i ? '#' : ' ');
++count;
if (count % width(symbol) == 0)
std::cout << '\n';
}
}
- C++20 compiler and standard library
- Supported:
- gcc10 and libstdc++-10-dev or higher (see
test/linux.Dockerfile
) - msvc: Visual Studio 2019 16.10.0 (see
test/win.Dockerfile
)
- gcc10 and libstdc++-10-dev or higher (see
- Not supported:
- clang doesn't seem to support all featured of C++20 needed to make this work
- macOS (due to lack of C++20 features), support will be added in the future
- Since the library is header-only, building is actually not necessary.
- Just put the
include
folder of this project into your header search path and it should just work. - However, if you'd like to run the tests, please select the top-level of the project in order to run CMake.
- For more information, please have a look at the Dockerfile in the test folder and consider the remarks below.
If you would like to run the tests, one has to add the following cmake flag: -DQRCODE_TESTS_ENABLED:BOOL=True
Building with tests enabled in Debug configuration won't build due to an issue in Microsoft's STL implementation. Release configuration works though.
CI builds usually consists of a test build and a conan demo build. If and only if both builds were successful, the CI state is green.
All tests are usually built and run in docker containers.
See test/linux.Dockerfile
for more info.
You can also hit test/linux_run.sh
which creates and
runs the docker image for you.
The library supports Conan out of the box. The conan_demo/Dockerfile
and conan_demo/run.sh
are for demonstration purposes.
It creates a small command-line tool which can create QR symbols from a given text message.
Please note: The Conan build is part of the CI checks. The tool has to be compiled successfully in order to clear this stage.