資源簡介
Qt 5.7 實現生成Code39條碼,獨立的類可直接移植,生成的圖片參數可設置,完整的Demo程序,直接編譯可運行

代碼片段和文件信息
/*****************************
??生成Code39條碼
??By?Jeff.Ma?2018-08-28
******************************/
#include?“code39.h“
Code39::Code39(QString?BarCode?QString?SavePath?int?fontSize)
{
????barcode?=?BarCode;
????path?=?SavePath;
????m_barHigh?=?40;
????m_barWidth?=?2;
????m_fontSize?=?fontSize;
????m_includeSN?=?false;
????InitMap();
????//start();
}
void?Code39::start(int?barWidth?int?high?bool?sn)
{
????m_includeSN?=?sn;
????m_barHigh?=?high;
????m_barWidth?=?barWidth;
????//校驗字符是否合法
????QString?com=“0123456789ABCDEFGHIJKLMNOPQISTUVWXWZ+-*/%$.?“;//合法字符模版
????for(int?i=0;i ????{
????????if(!com.contains(barcode.at(i)))
????????{
????????????QMessageBox?msg;
????????????msg.setText(QStringLiteral(“條形碼字符不合法!\n合法字符:A~Z?0~9?+-/%$[空格]“));
????????????msg.exec();
????????????return;
????????}
????}
????draw(CodeBinary(barcode)barcode);
}
void?Code39::draw(QString?BinaryNumQString?barcode)
{
????int?maxWidth;
????//預留10px的左右空白;
????maxWidth?=?m_barWidth?*?BinaryNum.size()?+?5;
????//計算條線寬度時,精度丟失造成條碼右邊空白,進行右移居中
????int?move=(maxWidth?-?m_barWidth?*?BinaryNum.size())?/?2;
????QSize?size(maxWidth?m_barHigh?+?m_fontSize?+?5);
????QImage?image(size?QImage::Format_ARGB32);
????image.fill(qRgba(255?255?255?0));
????//QBitmap?bmp(maxWidthm_barHigh+m_fontSize);
????QPainter?painter(&image);
????QPen?whiteblack;
//????painter.setRenderHint(QPainter::Antialiasingtrue);//弧線圓潤
????white.setColor(QColor(255255255));
????black.setColor(QColor(000));
????white.setWidth(m_barWidth);
????black.setWidth(m_barWidth);
????//背景充填白色
????painter.setPen(white);
????painter.drawRect(0?0?maxWidth?m_barHigh?+?m_fontSize);
????//畫線
????for(int?i=0;i ????{
????????if(BinaryNum.at(i)==‘1‘)?painter.setPen(black);
????????else?painter.setPen(white);
????????painter.drawLine(i*m_barWidth+m_barWidth/2+move0i*m_barWidth+m_barWidth/2+movem_barHigh);
????}
????qDebug()< ????//添加底部條形碼字符
????painter.setPen(black);
????painter.setRenderHint(QPainter::Antialiasingtrue);
????painter.setRenderHint(QPainter::TextAntialiasingtrue);
????painter.setRenderHint(QPainter::HighQualityAntialiasingtrue);
????QFont?font;
//????font.setFamily(“宋體“);
????font.setPixelSize(m_fontSize);
????font.setWeight(QFont::ExtraLight);
????painter.setFont(font);
????if(m_includeSN?==?false)
????{
????????painter.drawText(5?m_barHigh?+?5?maxWidth?m_fontSize?Qt::AlignCenter?barcode);
????}
????else
????{
????????painter.drawText(5?m_barHigh?+?5?maxWidth?m_fontSize?Qt::AlignCenter?“S/N:“?+?barcode);
????}
????image.save(path?+?barcode?+?“.bmp“);
}
QString?Code39::CodeBinary(QString?barcode)
{
????barcode=“*“+barcode+“*“;
????QString?str=““;
????for(int?i=0;i ????{
????????str+=map[barcode.at(i)]+“0“;//每個字符的二進制邏輯碼之間,用“0”隔開(加一條白線)
????}
????return?str;
}
void?Code39::InitMap(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????63210??2020-03-18?22:03??DemoCode39\app\CODE39-00001.bmp
?????文件????2045579??2020-03-18?22:02??DemoCode39\app\DemoCode39.exe
?????文件???????5055??2020-03-18?21:53??DemoCode39\code39.cpp
?????文件????????753??2020-03-18?21:46??DemoCode39\code39.h
?????文件???????1162??2020-03-18?21:52??DemoCode39\democode39.cpp
?????文件????????384??2020-03-18?21:14??DemoCode39\democode39.h
?????文件???????1081??2020-03-18?21:14??DemoCode39\DemoCode39.pro
?????文件??????23454??2020-03-18?20:59??DemoCode39\DemoCode39.pro.user
?????文件???????4340??2020-03-18?22:02??DemoCode39\democode39.ui
?????文件????????183??2020-03-18?20:59??DemoCode39\main.cpp
?????目錄??????????0??2020-03-18?22:02??DemoCode39\app
?????目錄??????????0??2020-03-18?22:02??DemoCode39
-----------?---------??----------?-----??----
??????????????2145201????????????????????12
評論
共有 條評論