二维码生成工具
本项目自有代码采用 MIT License 开源,详见 LICENSE 文件。
third_party/qrencode及libqrencode相关源码遵循 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 qrbmpQt图形界面版(macOS/Linux,Qt6推荐)
- 只保留 main_gui.cpp 为主入口(不要同时包含 main.cpp 和 third_party/qrencode/qrenc.c,否则会 main 函数冲突)。
- 用 qmake 自动生成 .pro 文件:
/opt/homebrew/bin/qmake -project
- 编辑 .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 - 编译:
/opt/homebrew/bin/qmake && make - 运行:
./二维码生成工具.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显示帮助
示例
- 自动选择最高容错率,输出多种DPI,边长50mm,默认内容
./qrbmp
- 指定容错率Q,输出300dpi,边长60mm,内容为16进制字符串
./qrbmp -e Q -d 300 -s 60 -i 1234567890abcdef
- 指定文本内容,输出150和300dpi,边长60mm,文件名前缀为myqrcode
生成文件如:
./qrbmp -d 150 -d 300 -s 60 -t "HelloQRCode测试文本123" -o myqrcodemyqrcode_60mm_Q_150dpi.bmp、myqrcode_60mm_Q_300dpi.bmp - 只生成一个文件并自定义文件名
./qrbmp -d 300 -t "hello" -o result.bmp - 指定每毫米点数(如标签打印机常用8点/mm)
(等价于DPI=8×25.4=203.2,--dpmm优先于-d)
./qrbmp -t "标签内容" --dpmm 8 -s 40
说明
-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等格式、批量生成等功能,请联系开发者。