2013-09-11 44 views
1

我在Windows 7上使用Qt 4.8.4版。我沒有條件在另一個平臺上測試此問題,例如Mac,Linux ...並使用以下代碼預覽內容當使用QPrintPreviewDialog時,內容不會顯示預覽

void DemoClass::on_btnOK_clicked() 
{ 
    QPrinter printer; 
    printer.setResolution(QPrinter::HighResolution); 
    printer.setPaperSize(QPrinter::A4); 
    printer.setOrientation(QPrinter::Portrait); 
    printer.setFullPage(true); 

    QPrintPreviewDialog *printPreview = new QPrintPreviewDialog(&printer); 
    connect(printPreview, SIGNAL(paintRequested(QPrinter*)), this, SLOT(print(QPrinter*))); 

    printPreview->setWindowTitle("Preview Dialog"); 
    Qt::WindowFlags flags(Qt::WindowTitleHint); 
    printPreview->setWindowFlags(flags); 
    printPreview->exec(); 
} 

void DemoClass::print(QPrinter *printer) 
{ 
    QPainter painter(printer); 
    painter.setRenderHints(QPainter::Antialiasing | 
         QPainter::TextAntialiasing | 
         QPainter::SmoothPixmapTransform, true); 

    painter.drawText(100, 100, "Hello World! 123"); 
} 

在按下OK按鈕,會出現該對話框:

Cannot show the preview content

正如你看到的,頁面是空白。該頁面不包含任何內容。然後我點擊預覽對話框中的頁面設置按鈕,這似乎:

Cannot show the preview content

...不改變任何東西,我點擊確定,然後在預覽成爲正確

Cannot show the preview content

我真的不明白原因是什麼。如何在不更改頁面設置的情況下正確顯示內容?

你有什麼解決方案嗎?

P/S:我已閱讀this post這是我的問題類似。作者建議使用QPageSetupDialog對象,我嘗試了不同的方法。但我仍然沒有解決問題,因爲我是Qt的新手。

+0

它可能是因爲你不使用「painter.end()」,當你來到頁面設置painter.end可能會被調用。 –

回答

0

我認爲問題在於設置打印機的高分辨率,根據文檔,這是1200 dpi。刪除以下行

printer.setResolution(QPrinter::HighResolution); 

使文本出現在預覽窗口中。 由於您嘗試設置高分辨率,我認爲您還需要相應地縮放您的畫家,以便它對應於視圖/頁面大小。

+0

這是我需要的答案。最後我解決了我的問題。謝謝你的幫助! –

+0

這可能是因爲QPrinter :: setResolution期望實際的DPI,而QPrinter :: HighResolution是您傳遞給QPrinter構造函數的枚舉,以告訴它使用支持的最高DPI。 –

相關問題