C/C++二维码生成库qrencode编译与使用
1 qrencode介绍
qrencode 是一个用于生成 QR 码(Quick Response Code)的工具和库。QR 码是一种矩阵条形码或二维条形码,能够在水平和垂直方向上存储信息。qrencode 支持多种编码方式,并能够生成不同复杂度和错误校正级别的 QR 码。
2 资源
3 编译
如果不想自己编译,可以跳过此章节。我分别编译了Windows和Linux平台的静态和动态库,可直接使用 工程地址 这里以 4.1.0版本为例
3.1 Windows平台编译
找到cmake
的安装目录的 bin
目录下,双击打开cmake ui界面cmake-gui.exe
分别选择qrencode代码根目录和编译目录,可创建一个build目录,在build目录中编译
点击Configure后,会弹出一个对话框,分别选择编译器和架构。然后点击Finish,等待配置生成。
等待配置生成后,会出现一些选项。默认是生成静态库,勾选BUILD_SHARED_LIBS
会生成动态库,CMAKE_INSTALL_PREFIX
选择安装目录,默认会安装到C:/Program Files (x86)/QRencode
目录下
选项设置完成后,点击Genrate
如果出现以下报错,不用管,进入qrencode源代码根目录下的build
目录,双击打开QRencode.sln
,用visual studio编译。
先选择qrencode
工程,点击生成,会生成头文件和库,再点击INSTALL
,点击生成,会进行安装。这样在build
目录下会生成include
和lib
目录,其中就是生成的头文件和库文件。
3.2 Linux平台编译
进入源代码根目录,在根目录下创建build
文件夹,在build
目录下执行cmake ..
接下来需要打开Linux平台的cmake gui工具,在build目录下执行ccmake .
,如果没有此命令,执行apt install cmake-curses-gui
安装Linux平台的cmake gui工具。 执行ccmake .
后会打开一个页面
和Windows一样,BUILD_SHARED_LIBS 代表是否生成动态库。点击上下按钮可以移动光标,点击回车可以修改值。CMAKE_INSTALL_PREFIX
表示安装目录,光标选到这一项后,先点击回车,输入目录地址,再点击回车。全部修改完成后,点击c进行保存,点击q退出。
然后执行make
进行编译,如果出现以下报错,可能是系统缺少libpng库
libpng库 在这里选择一个编译安装。 编译完成后,再执行make install
进行安装。同样在build目录下会生成include和lib目录,里面是对应的头文件和库文件。
4 qrencode使用
4.1 API介绍
qrencode核心API就一个
QRcode * QRcode_encodeString ( const char * string, int version, QRecLevel level,
QRencodeMode hint, int casesensitive) ;
4.2 在QT中使用
接下来就演示下如何在Qt中使用qrencode。 首先创建一个QT工程,然后将qrencode的头文件和库文件拷贝到QT工程目录下,这里是Windows平台动态库为例。 打开pro文件,右击选择添加库,选择外部库。
只勾选Windows,选择动态库,选择对应的库文件。然后下一步点击完成即可。
在QT窗口中需要添加一个QLabel控件,用于显示二维码信息。 代码如下
# include "widget.h"
# include "ui_widget.h"
# include "qrencode.h"
# include <QPainter>
Widget:: Widget ( QWidget * parent) :
QWidget ( parent) ,
ui ( new Ui:: Widget)
{
ui-> setupUi ( this) ;
createQR ( "Hello qrencode" ) ;
}
Widget:: ~ Widget ( )
{
delete ui;
}
void Widget:: createQR ( char * data)
{
QRcode * qrcode = QRcode_encodeString ( data, 0 , QR_ECLEVEL_L, QR_MODE_8, 0 ) ;
if ( qrcode == NULL ) {
return ;
}
QImage image ( qrcode-> width, qrcode-> width, QImage:: Format_ARGB32) ;
QPainter painter ( & image) ;
painter. setBrush ( Qt:: white) ;
painter. setPen ( Qt:: NoPen) ;
painter. setRenderHint ( QPainter:: Antialiasing, false) ;
painter. drawRect ( 0 , 0 , qrcode-> width, qrcode-> width) ;
painter. setBrush ( Qt:: black) ;
for ( qint32 y = 0 ; y < qrcode-> width; y++ ) {
for ( qint32 x = 0 ; x < qrcode-> width; x++ ) {
unsigned char b = qrcode-> data[ y * qrcode-> width + x] ;
if ( b & 0x01 ) {
QRectF r ( x, y, 1 , 1 ) ;
painter. drawRect ( r) ;
}
}
}
QRcode_free ( qrcode) ;
ui-> label-> setPixmap ( QPixmap:: fromImage ( image) ) ;
ui-> label-> setScaledContents ( true) ;
}
效果演示。编译运行后就会生成一个二维码。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091934.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!