• 大小: 428KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-07
  • 语言: 其他
  • 标签: Qt  Code39  

资源简介

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


评论

共有 条评论