Qt QPrinter setPaperSize无法正常工作

时间:2013-02-14 18:15:40

标签: c++ qt printing

我正在尝试创建一个Windows应用程序(但最终也会将其移植到Linux,因此交叉兼容性很重要,如果可能的话)将从网络摄像头拍摄照片并且可以在不使用printDialog框的情况下进行打印,但我是选择纸张尺寸时出现问题。我想将纸张大小设置为4“x 6”这是A6格式,但是当我使用setPaperSize(QtPrinter :: A6)时,它似乎默认为字母格式。它并不总是默认为所有打印机的字母,看起来每个打印机处理命令的方式不同,但大多数默认为字母。我相信这可能是Qt和打印机与驱动程序兼容的问题。

我的问题是:有没有人知道如何在Qt中将打印机设置为4“6”,这应该适用于所有打印机?

我的代码如下所示。

void MainWindow::Print() {

    QPainter painter;
    QPrinter *printer = new QPrinter(QPrinter::HighResolution);
    printer->setPaperSize(QPrinter::A6);
     if (!painter.begin(printer)) {
         qWarning("Failed to open file");
         return;
     }

     painter.fillRect(QRectF(QPointF(108,118),QPointF(110+352, 120+352)), Qt::black);
     painter.fillRect(QRectF(QPointF(109,119),QPointF(109+352, 119+352)), Qt::white);
     ui->graphicsView->scene()->render(&painter, QRectF(110,120, 350, 350), QRectF(0,0, ui->graphicsView->scene()->width(), ui->graphicsView->scene()->height()), Qt::IgnoreAspectRatio);
     painter.drawText(110, 110, "Test");
     painter.end();
}

我已尝试以下方法来调整纸张大小

printer->setPaperSize(QPrinter::A6)
printer->setPageSize(QPrinter::A6)
printer->setPaperSize(QSizeF(4.0, 6.0), QPrinter::Inch)

这些似乎都不起作用。如果有人能帮我解决这个问题,我会非常有帮助

1 个答案:

答案 0 :(得分:3)

setPaperSize依赖于从打印机驱动程序收到的信息,因此要真正与打印机无关,请自行计算pageRects。 请参阅pageRect和paperRect属性以及QPrinter的fullPage属性。 另请参阅我对Printing pagerect issues的回答,其中有一个(错误的)打印任意打印版本的开始示例以及如何修复问题中给出的代码。