2013-02-14 170 views
1

我想创建一个Windows应用程序(但最终也将其移植到linux上,因此如果可能,交叉兼容性很重要),它将从网络摄像头拍摄图片,并且可以不使用一个printDialog框,但我在选择纸张大小时遇到​​问题。我希望纸张大小设置为A6格式的4“x 6”,但是当我使用setPaperSize(QtPrinter :: A6)时,它似乎默认为字母格式。虽然并不总是默认使用所有打印机,但看起来每个打印机都以不同的方式处理命令,但大多数默认为letter。我相信这可能是Qt和打印机与驱动程序兼容性的问题。Qt QPrinter setPaperSize不能正常工作

我的问题是:有没有人知道一种方法将打印机设置为4“6”在QT应该与所有打印机一起工作?

我的代码如下所示。

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) 

这些都不似乎工作如下。如果有人可以帮我解决这个问题,我会非常大胆

回答

3

setPaperSize依赖于从打印机驱动程序接收到的信息,所以要真正打印机独立,calculare pageRects自己。 请参阅pageRect和paperRect属性以及QPrinter的fullPage属性。 另请参阅我对Printing pagerect issues的回答,其中有一个(错误的)打印任意打印指令的起始示例以及如何解决与问题给出的代码。

+0

我想我可能最终不得不这样做,但希望有人知道一个更简单的解决方案。尽管谢谢你的帮助 – Heheas 2013-02-15 20:27:24