越不过那山丘 2023-12-18 16:04 采纳率: 0%
浏览 0

(标签-qt|关键词-view)

qt 打印机问题

直接打印正常,如果使用预览窗口,预览显示正常,预览窗口打印输出就不对了。


void Print::on_Print_clicked()
{
    QPrinter printer;
    printer.setPageSize(QPageSize(QPageSize::A4));
    printer.setResolution(300);   
    printer.setPageMargins(QMarginsF(30, 30, 30, 30));
    printPreviewSlot(&printer);
}

void Print::on_preview_clicked()
{
    QPrintPreviewDialog preview(this);
    preview.printer()->setPageSize(QPageSize(QPageSize::A4));
    preview.printer()->setResolution(300);    
    preview.printer()->setPageMargins(QMarginsF(30, 30, 30, 30));

    preview.setMinimumSize(1920,1080);
    connect(&preview, &QPrintPreviewDialog::paintRequested, this, &Print::printPreviewSlot);
    preview.exec ();
}

void Print::printPreviewSlot(QPrinter* printer)
{
    QPainter painter(printer);

    qDebug() << "---------" << printer->pageLayout() << printer->resolution();
    int x = 0;
    int y = 0;
    int width = painter.viewport().width() / 7;

    QFont font[5]={QFont("宋体",26,60),QFont("宋体",26,61),QFont("宋体",26,QFont::Normal),QFont("宋体",26,QFont::Normal),QFont("宋体",26,QFont::Normal)};
    font[0].setPixelSize(86);
    font[1].setPixelSize(61);
    font[2].setPixelSize(61);
    font[3].setPixelSize(42);
    font[4].setPixelSize(45);

    y = 10;
    painter.setFont(font[0]);
    painter.drawText(QRect(0,y, painter.viewport().width(), 120), Qt::AlignCenter, "检测报告");

    y+=200;
    painter.setFont(font[4]);
    painter.setPen(QPen(QBrush(QColor(0,0,0)),2));
    for (int j = 0; j < 7; j++) {
        painter.drawText(QRect(x,y, width, 120), Qt::AlignCenter, _hList[j]);
        painter.drawRect(QRect(x,y, width, 120));
        x += width;
    }
    y+=120;

    painter.setFont(font[4]);
    painter.setPen(QPen(QBrush(QColor(0,0,0)),2));

    for (int i = 0; i < pageList.size(); i++) {
        x = 0;
        for (int j = 0; j < 7; j++) {
            painter.drawText(QRect(x,y, width, 120), Qt::AlignCenter, pageList[i][j]);
            painter.drawRect(QRect(x,y, width, 120));
            x += width;
        }
        y += 120;
    }

    y+=200;
    painter.drawText(QRect(600, y, 200, 120), Qt::AlignCenter|Qt::AlignTop, "检测员:");

    painter.drawText(QRect(1100, y, 200, 120), Qt::AlignCenter|Qt::AlignTop, "复  核:");

    painter.drawText(QRect(1600, y, 200, 120), Qt::AlignCenter|Qt::AlignTop, "日  期:");

}


直接打印

img

预览示意图:

img

预览窗口打印:

img

  • 写回答

1条回答 默认 最新

  • 火花20180731 2023-12-19 10:05
    关注

    和QPrinter的分辨率模式有关,直接打印是调用的QPrinter的构造函数,默认是QPrinter::ScreenResolution(使用屏幕分辨率)。也许打印预览的printer()返回的printer默认选择的是QPrinter::HighResolution(打印机分辨率)

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 12月18日

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图