1. 程式人生 > >在開發板上生成一個帶logo的二維碼 -(三)

在開發板上生成一個帶logo的二維碼 -(三)

第三階段:在開發板上生成一個帶logo的二維碼

 “二維碼”英文可譯為2-D barcodes (two-dimensional barcodes的縮寫) 或QR Code。 其中barcode指條形碼,QR是Quick Response的縮寫,即快速反應。

經過一段時間的研究,在原來沒有新增logo圖片的二維碼中添加了logo圖片。

       其實原理比較簡單(新增logo圖片),就是在生成的二維碼中重新繪製一個圖片上去就ok了。但是圖片的大小是有限制的,在容錯率較低的情況下,如果中間logo圖片比較大會影響二維碼的解析。一般在生成是使用高等級生成二維碼。

        但是問題來了,那中間的

logo是本地的圖片還是網路圖片呢,圖片的大小如何設定呢。根據相關資料顯示一般logo圖片的比例不超過整個二維碼圖片的1/3是不會影響二維碼的解析的。

參考資料:二維碼有一個容錯率的概念。
容錯率是指二維碼在正常識別的前提下可被遮擋的部分佔總二維碼面積的百分比。容錯率越高,可被遮擋的面積越大,二維碼圖案也越複雜。目前容錯率可分為L,M,Q,H四個等級,分別表示7%,15%,25%,30%但是,二維碼的複雜程度不全取決於二維碼的容錯率。在容錯率一定的情況下,二維碼包含的資訊越多,二維碼也會越複雜。目前,鑑於國產手機攝像頭的辨識能力,建議生成二維碼時,不要超過150個字元。(二維碼太複雜也影響構圖美觀)

   現在需要從程式碼端來設定二維碼的位置,達到每次修改二維碼的大小,logo隨著二維碼的改變而改變,一直是在二維碼的中部,這樣就需要從qrencode處的程式碼位置來解決這個問題;

問題:怎麼樣讓一個圖片處於另一個圖片居中位置?

構想:讓這兩個控制元件放在同一個Frame中,一個控制元件放在另一個控制元件的居中位置;

實現原理:QLabel(物件名為label_pixcode)載入二維碼圖片,二維碼在label_pixcode的居中位置,而logo圖片作為資原始檔,放在一個新的QLable上,(物件名為label_logo,位置居中,(拖動實現);

1.QT工程中(可以建立一個只有這一個介面的

QT工程,這裡不細緻描述!),介面上加入這兩個QLabelobject name分別為label_pixcodelabel_logo,中間的籃球就是要顯示的logo,載入方式為資源形式,即將這個籃球圖片檔案放在工程目錄下的qrc目錄下,設定屬性stylesheetborder-image為該圖,效果如下;

 

2.在該介面應用程式中,新增如下幾行的程式碼,保證在QT工程執行的同時,qrencode程式伴隨執行,並生成二維碼1.png放在當前工程目錄下;二維碼的生成過程省略,具體見《在開發板上生成一個帶logo的二維碼-(二)》

 

3.在該介面下的應用程式(.cpp)中,新增三行以下的程式碼,將二維碼圖片1.png顯示在label_pixcode的中間部位;

注:這裡的第二行就是將1.png圖片顯示在中間的功能;

 

引申:上下左右?

這裡的 Qt::Alignment 型別有以下取值。

1Qt::AlignLeft::水平方向靠左。

2Qt::AlignRight:水平方向靠右。

3Qt::AlignHCenter:水平方向居中。

4Qt::AlignJustify:水平方向調整間距兩端對齊。

5Qt::AlignTop:垂直方向靠上。

6Qt::AlignButton:垂直方向靠下。

7Qt::AlignVCenter:垂直方向居中。

4.觀察開發板,顯示屏,發現成功了!

參考:       

二維碼中新增logo圖片(提供下載)- FreshMan -部落格頻道- CSDN.NET