梁子財
基于Qt for Android二維碼掃描軟件開發
梁子財
(華中科技大學 中歐清潔與可再生能源學院,湖北 武漢 430074)
隨著互聯網的快速發展,移動支付正在替代傳統支付方式成為最常用的支付方式。目前的移動支付較多采用手機掃描二維碼進行支付操作。基于Qt for Android開發了一款二維碼掃描軟件,為基于手機二維碼掃描識別技術提供了借鑒。
Qt for Android;二維碼掃描;Android軟件;軟件開發
隨著智能手機與互聯網的快速發展,移動終端用戶激增,移動終端成為從互聯網獲取信息和服務的一種重要手段[1]。移動支付也正在替代傳統支付方式成為最常用的支付手段[2]。目前的移動支付較多采用手機掃描二維碼進行支付操作。Qt for Android是用于在Android上進行開發的Qt平臺,利用該平臺可以使用C++語言開發Android軟件。
筆者開發了一款基于QT for Android的二維碼掃描軟件,用戶可以利用該軟件對二維碼進行掃描識別。
通常手機識別二維碼有兩種方式,一種是利用手機相機對二維碼進行掃描識別,另一種是打開手機相冊直接讀取二維碼照片進行識別。但是Qt平臺沒有直接調用安卓手機相機與相冊的接口,需要通過JNI接口調用JAVA程序來間接調用手機相機與相冊。
因此本軟件的設計分為兩部分,一部分是攝像頭掃描模塊,另一部分是相冊讀取模塊,如圖1所示。

圖1 二維碼掃描軟件的模塊劃分
攝像頭掃描模塊需要實現兩部分功能:①基于QML語言設計掃描動畫、定位框與蒙影;②基于JNI接口調用安卓手機攝像頭讀取相機數據。相冊模塊只需利用JNI接口調用安卓手機原生相冊瀏覽界面,讓用戶選擇帶讀取照片即可。
兩種模塊掃描二維碼之后需要對二維碼進行解碼。筆者利用QZXing庫進行二維碼解碼,部分實行代碼如下:
// 調用QZXing的函數進行二維碼掃描
QZXing decoder;
QString qrmsg=decoder.decodeImage(img,iWidth,iHeight,false);
攝像頭掃描模塊分為兩部分,一部分是設計掃描動畫、定位框等,另一部分是調用安卓手機相機讀取相機數據。
QML是一種陳述性語言,用來描述一個程序的用戶界面:是什么樣子以及它如何表現。筆者利用QML語言設計二維碼掃描的動畫、定位框等,效果如圖2所示。

圖2 二維碼掃描界面效果
繪制定位框的QML代碼如下:
//畫右上的邊角
t沒有直接調用安卓手機相機的接口,因此需要利用JNI接口調用安卓手機相機。在軟件開啟時,系統會自動調用函數checkPermission("android.permission.CAMERA")獲取開啟相機的權限,之后在QML代碼中添加相機錄像顯示代碼,如下所示:
相冊模塊利用JNI接口調用安卓手機原生相冊瀏覽界面,讓用戶選擇帶讀取照片,其界面效果如圖3所示。

圖3 相冊界面效果
調用JNI接口實現打開手機相冊的代碼如下:
筆者基于Qt for Android開發了一款二維碼掃描Android軟件,為基于手機二維碼掃描識別技術提供借鑒,同時通過實驗驗證,證明該軟件能迅速讀取二維碼數據,具有實用性。
[1]羅軍舟,吳文甲,楊明.移動互聯網:終端、網絡與服務[J].計算機學報,2011,34(11):2029-2051.
[2]曹婷,梁婧婕,呂璞鑫,等.移動支付對大學生消費的影響探析[J].中國商論,2016(14):95-96.
TP311.52
A
10.15913/j.cnki.kjycx.2019.17.043
2095-6835(2019)17-0095-02
梁子財(1993—),男,福建泉州人,在讀碩士,研究方向為生產物流系統仿真優化與數控軟件開發。
〔編輯:王霞〕