2013-02-14 66 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