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, "日 期:");
}
直接打印
预览示意图:
预览窗口打印: