1.需求
需要將小票號打印成條形碼,退換貨時通過掃描槍直接掃描不用人工輸入進行退貨和換貨,加快速度
2.實現
這裏通過zint生成條形碼圖片,通過qt將圖片繪製到打印紙上實現,也可以直接在打印紙上進行繪製線條,因人而異
3.代碼片段
打印小票號
void mytestimage::printBarcode(const QString &strTitle)
{
QString strImagePath("");
strImagePath = QCoreApplication::applicationDirPath() + "//test.png";
struct zint_symbol * my_symbol = ZBarcode_Create();
my_symbol->symbology = BARCODE_CODE93;
strcpy(my_symbol->outfile, strImagePath.toLocal8Bit().toStdString().c_str());
ZBarcode_Encode(my_symbol, (unsigned char*)strTitle.toLocal8Bit().toStdString().c_str(), 0);
ZBarcode_Print(my_symbol, 0);
ZBarcode_Delete(my_symbol);
QPrinter printer;
QPrintDialog printdialog(&printer, this);
if (printdialog.exec())
{
int dpi = printer.logicalDpiX();
int nmm = printer.paperRect(QPrinter::Millimeter).width();
int width = std::min(nmm, 80)*(dpi*1.0/25.4);
QPainter painter(&printer);
QImage image(strImagePath, "PNG");
QRect rt1 = image.rect();
QRect rtwindow = painter.window();
QRect rtview = painter.viewport();
int nmax = 0;
if (image.width() + 20 < width)
nmax = std::max(image.width() + 20, width);
else
nmax = std::min(image.width() + 20, width);
QRect rtimage(0, 0, nmax, rtwindow.height());
QRect rtimageview(0, 0, nmax, rtview.height());
int nmin = std::min(image.width(), nmax - 80);
QRectF rtdes(40, 10, nmin, 100);
QRectF rtsrc(0, 0, image.width(), image.height());
painter.setWindow(rtimage);
painter.setViewport(rtimageview);
painter.drawImage(rtdes, image, rtsrc);
painter.setWindow(rtwindow);
painter.setViewport(rtview);
}
}
4.備註