GitHunt
ZZ

zzzzkkkk7866/qr-bmp-generator

二维码生成工具

本项目自有代码采用 MIT License 开源,详见 LICENSE 文件。
third_party/qrencodelibqrencode 相关源码遵循 LGPL-2.1+,原作者 Kentaro Fukuchi,详见源码头部及 libqrencode 官方

项目简介

本工具是一款高度可定制、跨平台、专业级的二维码生成器,支持命令行和图形界面(Qt GUI),适合工业、流通、标签打印等多场景。参数联动智能,推荐方案丰富,用户体验和交互细节持续优化。


功能亮点

  • 支持16进制和文本输入,参数可组合,自动检测内容可用的最高容错率,文件名中包含容错率等级。
  • 智能自适应:根据内容、宽度、DPI/DPmm、最小点宽等,自动选择最优容错率和scale,保证二维码点宽≥最小值,兼顾清晰度和容错率。
  • 推荐方案丰富,支持一键应用和命令行复制。
  • 支持macOS和Windows,Windows下可用MinGW-w64交叉编译,生成静态可执行文件。
  • 集成libqrencode源码,无需外部依赖。

依赖

  • C++17
  • Qt 5/6(仅GUI需要)
  • 无需外部二维码库,已集成libqrencode源码

编译

命令行版

只需编译 main.cpp 和 third_party/qrencode 相关源码:

g++ main.cpp third_party/qrencode/qrencode.c third_party/qrencode/bitstream.c third_party/qrencode/mask.c third_party/qrencode/mmask.c third_party/qrencode/qrinput.c third_party/qrencode/qrspec.c third_party/qrencode/mqrspec.c third_party/qrencode/rsecc.c third_party/qrencode/split.c -o qrbmp

Qt图形界面版(macOS/Linux,Qt6推荐)

  1. 只保留 main_gui.cpp 为主入口(不要同时包含 main.cpp 和 third_party/qrencode/qrenc.c,否则会 main 函数冲突)。
  2. 用 qmake 自动生成 .pro 文件:
    /opt/homebrew/bin/qmake -project
  3. 编辑 .pro 文件,添加:
    QT += widgets
    SOURCES += main_gui.cpp \
               third_party/qrencode/bitstream.c \
               third_party/qrencode/mask.c \
               third_party/qrencode/mmask.c \
               third_party/qrencode/mqrspec.c \
               third_party/qrencode/qrencode.c \
               third_party/qrencode/qrinput.c \
               third_party/qrencode/qrspec.c \
               third_party/qrencode/rsecc.c \
               third_party/qrencode/split.c
    
  4. 编译:
    /opt/homebrew/bin/qmake && make
  5. 运行:
    ./二维码生成工具.app/Contents/MacOS/二维码生成工具

交叉编译(Windows)

x86_64-w64-mingw32-g++ main.cpp third_party/qrencode/qrencode.c third_party/qrencode/bitstream.c third_party/qrencode/mask.c third_party/qrencode/mmask.c third_party/qrencode/qrinput.c third_party/qrencode/qrspec.c third_party/qrencode/mqrspec.c third_party/qrencode/rsecc.c third_party/qrencode/split.c -o qrbmp.exe

命令行用法

./qrbmp [选项]

支持的选项

  • -e <L|M|Q|H> 指定容错率(不指定则自动选择最高)
  • -d <dpi> 指定输出DPI(可多次指定, 默认72/150/300/600)
  • --dpmm <点数> 指定每毫米点数(如8、12等,优先于-d)
  • -s <mm> 指定二维码边长(单位mm, 默认50)
  • -i <hexstr> 指定输入16进制字符串
  • -t <text> 指定输入文本内容(UTF-8,优先级高于-i)
  • -o <prefix> 指定输出文件名前缀或完整文件名
  • --min-dot-mm <mm> 指定二维码最小点宽(默认0.3mm)
  • -h 显示帮助

示例

  1. 自动选择最高容错率,输出多种DPI,边长50mm,默认内容
    ./qrbmp
  2. 指定容错率Q,输出300dpi,边长60mm,内容为16进制字符串
    ./qrbmp -e Q -d 300 -s 60 -i 1234567890abcdef
  3. 指定文本内容,输出150和300dpi,边长60mm,文件名前缀为myqrcode
    ./qrbmp -d 150 -d 300 -s 60 -t "HelloQRCode测试文本123" -o myqrcode
    生成文件如:myqrcode_60mm_Q_150dpi.bmpmyqrcode_60mm_Q_300dpi.bmp
  4. 只生成一个文件并自定义文件名
    ./qrbmp -d 300 -t "hello" -o result.bmp
  5. 指定每毫米点数(如标签打印机常用8点/mm)
    ./qrbmp -t "标签内容" --dpmm 8 -s 40
    (等价于DPI=8×25.4=203.2,--dpmm优先于-d)

说明

  • -t-i 可任选其一,-t 优先。
  • -o 作为前缀时会自动拼接参数信息,作为完整文件名时仅在只生成一个文件时生效。
  • -d--dpmm 二选一,--dpmm 优先。
  • 默认内容为内置16进制字符串。
  • 输出为1bit BMP图片,适合打印和工业用途。

图形界面(Qt GUI)功能

  • 支持内容输入、参数设置、二维码预览与保存,DPI/dpmm二选一输入,参数联动,最小点宽可设置。
  • 参数区和二维码预览区横向分栏,适合宽屏显示。
  • 推荐方案表:每次参数变化自动生成多种推荐方案(不同容错率、点宽、DPI等),并可一键应用。
  • 增加"优化目标"选择(质量优先、可靠性优先、内容优先),推荐方案排序随之变化。
  • 参数区每项旁有"优先"单选框,用户可指定优先参数,推荐方案以该参数为主,其他参数自动适配。
  • 推荐方案表格美化,点宽列自适应宽度并格式化,应用按钮居中,警告/推荐语作为tooltip显示。
  • 增加"命令行"按钮,点击弹窗显示该方案的命令行指令,并自动复制到剪切板,便于脚本调用。
  • 输入区默认填入内置16进制字符串,增加"清除"按钮。
  • 切换"文本/16进制"输入类型、DPI/DPmm切换时,推荐方案表自动刷新。

用户体验与交互细节

  • 所有参数、内容、优化目标、优先项变化都会自动刷新推荐方案。
  • 移除了参数锁定功能,改为"优先"单选,界面更简洁。
  • 代码中所有与锁定相关的控件和逻辑已彻底移除。
  • 多次根据用户反馈优化表格显示、按钮布局、tooltip、自动刷新、剪切板复制等细节。

跨平台与依赖

  • 支持macOS和Windows,Windows下可用MinGW-w64交叉编译,生成静态可执行文件。
  • 集成libqrencode源码,避免外部依赖。

问题修复与细节处理

  • 修复了QString转std::vector<uint8_t>的类型错误。
  • 解决了QTableWidget内容溢出、按钮遮挡、lambda捕获QWidget导致的编译错误等问题。
  • 保证所有功能在macOS下可编译运行,命令行和GUI均可用。

常见问题与解决

1. main函数重复/duplicate symbol '_main'

  • 只保留一个主入口文件(如main_gui.cpp),不要同时编译main.cpp、third_party/qrencode/qrenc.c。
  • .pro文件SOURCES只列main_gui.cpp和库源码。

2. libqrencode/tests相关报错

  • 删除libqrencode/tests目录,并从.pro文件中移除所有libqrencode/tests/相关文件。

3. Qt6找不到QApplication等头文件

  • .pro文件需手动添加QT += widgets。

4. 只编译命令行版/GUI版

  • 命令行版只编译main.cpp和库源码。
  • GUI版只编译main_gui.cpp和库源码。

5. Qt路径问题

  • Homebrew安装Qt6后,qmake路径通常为/opt/homebrew/bin/qmake。
  • 可用which qmake查找。

如需PNG等格式、批量生成等功能,请联系开发者。