有没有在linux qt下做过条形码的朋友,求指点。。。

Allensb 2016-09-20 09:35:17
我下载了别人的barcode13源码,但是只有barcode13.cpp和barcode13.h 。加入到工程之后调用没有反应。也没有错误提示。debug进去之后明显程序已经执行。实在不明白什么原因。求指点。
...全文
636 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Allensb 2019-08-02
  • 打赏
  • 举报
回复
引用 6 楼 安卓小气 的回复:
能加个好友详细了解下在Linux下咋生成条形码和二维码吗
这个是两年前的项目,现在已经结了。我可以找找
安卓小气 2019-06-10
  • 打赏
  • 举报
回复
能加个好友详细了解下在Linux下咋生成条形码和二维码吗
Allensb 2016-10-08
  • 打赏
  • 举报
回复
非常感谢 学习了。。。
无情猫 2016-10-01
  • 打赏
  • 举报
回复
ui->label->pixmap()->save("d:/1.bmp"); 这句代码是无用的,调试过程中加的忘记删除了。
无情猫 2016-10-01
  • 打赏
  • 举报
回复
LZ有几个错误。
1. 条码位数不够
2. barcodeEAN13这个重载QPixmap的,你需要把他画到一个Label上面
3. barcodeEAN13这个类里面sValue.at(i).digitValue()改成sValue[i].digitValue()

调用方法:

barcodeEAN13 barcode("10100110000000000",400,200, 1);
ui->label->setPixmap(barcode);
ui->label->pixmap()->save("d:/1.bmp");


更改后的barcodeEAN13.cpp


#include "barcodeean13.h"
#include <QPainter>
#include <QDebug>
barcodeEAN13::barcodeEAN13(QString svalue,int width,int height,qreal ratio)
:QPixmap(width,height)
{
sValue = svalue;
starLine= "101"; //条形码左护线
midLine="01010"; //条形码间隔线
endLine="101"; //条形码右护线
listA<<"0001101"<<"0011001"<<"0010011"<<"0111101"<<"0100011"<<"0110001"<<"0101111"<<"0111011"<<"0110111"<<"0001011"; //间隔线左侧编码集合A
listB<<"0100111"<<"0110011"<< "0011011"<<"0100001"<<"0011101"<<"0111001"<<"0000101"<<"0010001"<<"0001001"<<"0010111"; //间隔线左侧编码集合B
listGuid <<"AAAAAA"<<"AABABB"<< "AABBAB"<< "AABBBA"<< "ABAABB"<< "ABBAAB"<< "ABBBAA"<< "ABABAB"<< "ABABBA"<<"ABBABA"; //引导数编码规则
listR <<"1110010"<< "1100110"<< "1101100"<< "1000010"<< "1011100"<<"1001110"<<"1010000"<<"1000100"<<"1001000"<<"1110100"; //间隔线右侧编码集合
calCheckDigit();
QString str = targetCode();
drawBar(str);
drawText();
}

void barcodeEAN13::calCheckDigit()
{
int sum=0;
int sum1=0;
QString check;
for(int i=11;i>=0;i--)
{
if(i%2==1)
//sum += sValue[i].digitValue();
sum += sValue[i].digitValue();
else
//sum1+=sValue[i].digitValue();
sum1 += sValue[i].digitValue();
}

sValue.append(check.setNum(10-(sum*3+sum1)%10).right(1));
}
QString barcodeEAN13::targetCode()
{
QString targetStr,guidStr;
//int guid I= sValue.at(0).digitValue();
int guidI= sValue[0].digitValue();
guidStr = listGuid.at(guidI);
targetStr.append(starLine);
for(int i=1;i<=6;i++)
{
if(guidStr[i-1] == 'A')
{
targetStr.append(listA.at(sValue[i].digitValue()));
}
else
{
targetStr.append(listB.at(sValue[i].digitValue()));
}
}
targetStr.append(midLine);
//return "";
for(int i=7;i<=12;i++)
{
targetStr.append(listR.at(sValue[i].digitValue()));
}
targetStr.append(endLine);
return targetStr;
}
void barcodeEAN13::drawBar(QString targetStr)
{
int h;
QPen pen;
pen.setWidth(2);
QPainter painter(this);
fill(QColor(255,255,255));

for(int i=0;i<targetStr.length();i++)
{
if(i<3 || i>91 || (i>44 && i<50))
h=100;
else
h=89;
if(targetStr.at(i)=='1')
{
pen.setColor(QColor(0,0,0));
}
else
{
pen.setColor(QColor(255,255,255));
}
painter.setPen(pen);
painter.drawLine((14+i)*pen.width(),0,(14+i)*pen.width(),h);
}
}
void barcodeEAN13::drawText()
{
QPainter painter(this);
painter.setFont(QFont("KaiTi_GB2312",10,false));
painter.drawText(14,108,sValue.left(1));
for(int i=1;i<7;i++)
{
painter.drawText(25+i*13,108,sValue.mid(i,1));
}
for(int i=7;i<13;i++)
{
painter.drawText(38+i*13,108,sValue.mid(i,1));
}
}


使用效果图:
Allensb 2016-09-20
  • 打赏
  • 举报
回复
调用的时候为是这样写的 barcodeEAN13("1010011",20,30);
Allensb 2016-09-20
  • 打赏
  • 举报
回复

#include "barcodeean13.h"
#include <QPainter>
barcodeEAN13::barcodeEAN13(QString svalue,int width,int height,qreal ratio)
        :QPixmap(width,height)
{
    sValue=svalue;
    starLine= "101";   //条形码左护线
    midLine="01010";    //条形码间隔线
    endLine="101";    //条形码右护线
    listA<<"0001101"<<"0011001"<<"0010011"<<"0111101"<<"0100011"<<"0110001"<<"0101111"<<"0111011"<<"0110111"<<"0001011";   //间隔线左侧编码集合A
    listB<<"0100111"<<"0110011"<< "0011011"<<"0100001"<<"0011101"<<"0111001"<<"0000101"<<"0010001"<<"0001001"<<"0010111";    //间隔线左侧编码集合B
    listGuid <<"AAAAAA"<<"AABABB"<< "AABBAB"<< "AABBBA"<< "ABAABB"<< "ABBAAB"<< "ABBBAA"<< "ABABAB"<< "ABABBA"<<"ABBABA";  //引导数编码规则
    listR <<"1110010"<< "1100110"<< "1101100"<< "1000010"<< "1011100"<<"1001110"<<"1010000"<<"1000100"<<"1001000"<<"1110100";   //间隔线右侧编码集合
    calCheckDigit();
    QString str=targetCode();
    drawBar(str);
    drawText();
}
void barcodeEAN13::calCheckDigit()
{
    int sum=0;
    int sum1=0;
    QString check;
    for(int i=11;i>=0;i--)
    {
        if(i%2==1)
            sum+=sValue.at(i).digitValue();
        else
            sum1+=sValue.at(i).digitValue();
    }
    sValue.append(check.setNum(10-(sum*3+sum1)%10).right(1));
}
QString barcodeEAN13::targetCode()
{
    QString targetStr,guidStr;
    int guidI=sValue.at(0).digitValue();
    guidStr=listGuid.at(guidI);
    targetStr.append(starLine);
    for(int i=1;i<=6;i++)
    {
        if(guidStr.at(i-1)=='A')
        {
            targetStr.append(listA.at(sValue.at(i).digitValue()));
        }
        else
        {
            targetStr.append(listB.at(sValue.at(i).digitValue()));
        }
    }
    targetStr.append(midLine);
    for(int i=7;i<=12;i++)
    {
        targetStr.append(listR.at(sValue.at(i).digitValue()));
    }
    targetStr.append(endLine);
    return targetStr;
}
void barcodeEAN13::drawBar(QString targetStr)
{
   int h;
   QPen pen;
   pen.setWidth(2);
   QPainter painter(this);
   fill(QColor(255,255,255));

   for(int i=0;i<targetStr.length();i++)
   {
       if(i<3 || i>91 || (i>44 && i<50))
           h=100;
       else
           h=89;
       if(targetStr.at(i)=='1')
       {
         pen.setColor(QColor(0,0,0));
        }
       else
       {
         pen.setColor(QColor(255,255,255));
       }
       painter.setPen(pen);
       painter.drawLine((14+i)*pen.width(),0,(14+i)*pen.width(),h);
    }
}
void barcodeEAN13::drawText()
{
    QPainter painter(this);
    painter.setFont(QFont("KaiTi_GB2312",10,false));
    painter.drawText(14,108,sValue.left(1));
    for(int i=1;i<7;i++)
    {
        painter.drawText(25+i*13,108,sValue.mid(i,1));
    }
    for(int i=7;i<13;i++)
    {
        painter.drawText(38+i*13,108,sValue.mid(i,1));
    }
}

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧