移动终端的普及,二维码的使用越来越广泛,最近小小的研究了一下QT下二维码的使用。
二维码 (Two-dimensional code),又称 二维条码 ,它是用特定的 几何图形 按一定规律在平面(二维方向)上分布的黑白
一扫(简称313)功能的应用使得二维码更加普遍。
QZXing:Qt
包装ZXing的解码库。
更多参考:
https://projects.developer.nokia.com/QZXing
.
本文开发二维码的小工具采用的就是QZXing库。库的使用方法很简单,从上面网址上下载下来源代码,源代码根目录下有
个pri文件,因为我是在VS2010中开发的,按道理是可以在VS工程中编译这包源码包的。但是编译总是失败。所以采用另
外的方法,新建个QTcreator工程,在工程中把源码包拷贝进工程中,再在pro工程文件中加上
include
(QZXing/QZXing.pri)。
编译即可生成dll文件。可能qtcreator采用的mingw编译器,编译生成的dll在msvc中不能静态加载。尝试了静态加载都是失
败的,而采用QT自带的QLibrary加载DLL是成功的。
程序运行效果如下: 启动后 选择二维码图片后效果: 1.自定义一个窗体类QrCodeForm.h
typedef
bool
(
*
fpGetQrStr
)
(
const
char
*
,
char
*
,
int
)
;
class
CQrCodeForm
:
public
UiBaseDialog
{
Q_OBJECT
public
:
CQrCodeForm
(
QWidget
*
parent
=
0
)
;
~
CQrCodeForm
(
)
;
private
slots
:
void
slots_file_selected
(
)
;
private
:
Ui
::
Form
ui
;
QString
m_fileName
;
QLibrary
*
pdllLib
;
fpGetQrStr
GetQrStr
;
}
;
2.窗体类实现 QrCodeForm.cpp
CQrCodeForm
::
CQrCodeForm
(
QWidget
*
parent
)
:
UiBaseDialog
(
parent
)
{
ui
.
setupUi
(
this
)
;
createTitleBar
(
ui
.
Title
,
WindowToolMin |
WindowToolClose
,
tr
(
"二维码识别"
))
;
QDesktopWidget
*
desk
=
QApplication
::
desktop
(
)
;
int
wd
=
desk
->
width
(
)
;
int
ht
=
desk
->
height
(
)
;
this
->
move
((
wd
-
width
(
))/
2
,
(
ht
-
height
(
))/
2
)
;
connect
(
ui
.
pushButton
,
SIGNAL
(
clicked
(
))
,
this
,
SLOT
(
slots_file_selected
(
)))
;
pdllLib
=
new
QLibrary
(
"QTCode.dll"
)
;
if
(
!
pdllLib
->
load
(
))
{
return
;
}
else
{
GetQrStr
=
(
fpGetQrStr
)
pdllLib
->
resolve
(
"GetQrStr"
)
;
if
(
GetQrStr
==
NULL
)
{
return
;
}
}
return
;
}
CQrCodeForm
::
~
CQrCodeForm
(
)
{
}
void
CQrCodeForm
::
slots_file_selected
(
)
{
m_fileName
=
QFileDialog
::
getOpenFileName
(
this
,
tr
(
"二维码打开文件"
)
,
"C:\\"
,
tr
(
"任何文件(*.*)"
";;文本文件(*.png)"
))
;
ui
.
lineEdit
->
setText
(
m_fileName
)
;
//
char
buffer
[
QRBUFSIZ
]
=
{
0
}
;
bool
bResult
=
GetQrStr
(
m_fileName
.
toStdString
(
)
.
c_str
(
)
,
buffer
,
QRBUFSIZ
)
;
//UTF-8编码
QString
ss
=
QTextCodec
::
codecForName
(
"UTF-8"
)
->
toUnicode
(
buffer
)
;
if
(
bResult
)
{
ui
.
textEdit
->
setText
(
ss
)
;
QImage
*
img
=
new
QImage
;
//加载图像
if
(
!
(
img
->
load
(
m_fileName
)
)
)
{
QMessageBox
::
information
(
this
,
tr
(
"打开图像失败"
)
,
tr
(
"打开图像失败!"
))
;
delete
img
;
return
;
}
*
img
=
img
->
scaled
(
ui
.
label
->
width
(
)
,
ui
.
label
->
height
(
)
,
Qt
::
KeepAspectRatio
)
;
ui
.
label
->
setPixmap
(
QPixmap
::
fromImage
(
*
img
))
;
}
else
{
ui
.
textEdit
->
setText
(
tr
(
"图片不是合法二维图片"
))
;
}
}
qt版本:4.8.6,开发环境:vs2010 源码下载地址:http://download.csdn.net/detail/hiwubihe/9542092 注:
技术在于交流、沟通,转载请注明出处并保持作品的完整性。
作者:
程序人生
原 文: http://blog.csdn.net/hiwubihe/article/details/38679621 |
qt二维码示例
最新推荐文章于 2024-09-21 14:25:59 发布