QT が Zebra プリンタに接続するバグを記録する

最初に背景を説明します

打印机:ZD888
打印方式:qペインター描画と印刷
纸张大小: 70mm*70mm

質問

如果没有设置打印位置的偏移,就是这句代码QRectF textRect(0, 0, printer->width(), printer->height());,也就是这里的x,y是0,那么可以出纸,但是位置不对,如果不是零,比如是10,直接就不出纸,打印机指示灯闪烁两次 ,就没反应了。也找不到原因,完全无从下手的感觉,后来实在没办法了,我想尝试用wps去打印试试,谁成想,在设置纸张尺寸时候发现了问题,下面开始贴图解释

我圈起来的是wps从打印机读到的纸张尺寸

ここに画像の説明を挿入

下面这张图是在斑马打印机设置软件里设置的纸张尺寸

ここに画像の説明を挿入

可以看到,wps从打印机读取到的尺寸竟然比实际尺寸小了一毫米,我猜测额,wps应该是读取了打印机的dpi或其他参数换算出来的这个69mm,这中间应该是有四舍五入过,也就是按dpi计算出来的实际尺寸应该是69mm,斑马的这款软件应该也是对用户输入值70mm做过处理的,毕竟人家就是干这行的,只有我自己傻傻的在qt的代码里直接设置尺寸为70mm,后来把70换成69马上就OK了,一切都正常了,最后贴上出问题的代码

問題のあるコード

//打印按钮下的代码
    QPrinter printer(QPrinter::HighResolution);
    //QPrinter printer;
    printer.setPrinterName(ui->cbx_printerList->currentText());
    // 设置纸张尺寸为70mm*70mm
    printer.setPageSize(QPrinter::Custom);
    qDebug()<<printer.widthMM();
    qDebug()<<printer.heightMM();
    qDebug()<<printer.margins().left;
    qDebug()<<printer.margins().top;
    qDebug()<<printer.margins().bottom;
    qDebug()<<printer.margins().right;
    printer.setPageSizeMM(QSizeF(70,70));
    //printer.setPageSize(QPageSize(QSizeF(70, 70), QPageSize::Millimeter));
    printer.setPageMargins(0,0,0,0,QPrinter::Millimeter);
    printer.setFullPage(true);

    QPrintPreviewDialog preview(&printer, this);
    connect(&preview, &QPrintPreviewDialog::paintRequested, this, &PrinterBaseSetup::printSlots);
    preview.exec();

//预览确认槽函数
 //创建画家对象,开始绘制
        QPainter painter(printer);
        // 设置字体和文本颜色
        QFont font("宋体", 10);
        painter.setFont(font);
        painter.setPen(Qt::black);

        // 绘制文本,注意要设置绘制区域和对齐方式
        //qDebug()<<"打印机默认宽高:"<<printer->width()<<","<<printer->height();
        QRectF textRect(100, 100, printer->width(), printer->height());
        painter.drawText(textRect, Qt::AlignTop, "今天是个好日子");

        // 结束绘制,释放资源
        painter.end();

エピローグ

このブログで何度かこの言葉が使われており猜测、テクノロジーに携わる者にとっては非常に不正確な言葉ですが、そんなことはありませんが、それでも今日のコンピューターサイエンスの発展により、さまざまなプログラミング言語、ルート、や分野など、非常に多くの細分化があり、コンピュータ サイエンスの特定の分野の知識をすべて知っているとはあえて言えない人はいませんが、実際のプロジェクトに直面すると、必然的に専門分野以外の知識にも触れてしまいます。推測と見積もりは時間を節約できます。時間を節約できるとはあえて言いませんが、少なくとも時間を無駄にしないようにできます。実際、座って QPainter と QPrinter を終了するのは問題ありませんが、プロジェクトの納期は守られません。食べたいからです この知識が遅れています。

ここにあるものは猜测実際には推測ではありません 私は、これが私たちの脳内の既存の知識システムによる目前の問題の推定であることを好みます この推定のプロセスを説明する方法がないというだけで、私たちはそれすら気づいていない。

おすすめ

転載: blog.csdn.net/weixin_42485732/article/details/130452488