2011-11-29 89 views
1

我正在嘗試使用QWebview在打印機上打印圖像文件,但不打印圖像空白頁。請找到下面的代碼。如何使用QT打印來自打印機的圖像文件

void ChartViewer::onprintBtnClicked() 
{ 
    QString fileName = QFileDialog::getOpenFileName(this,"Open File",QString(),"Pdf File(*.png)"); 
    qDebug()<<"Print file name is "<<fileName; 
    if(fileName.endsWith(".png")) 
    { 
     QPrinter printer; 
     QWebView *view = new QWebView; 
     QPrintDialog *dlg = new QPrintDialog(&printer,this); 
     printer.setOutputFileName(fileName); 
     if(dlg->exec() != QDialog::Accepted) 
      return; 
     view->load(fileName); 
     view->print(&printer); 
    } 
} 

如果我使用查看 - >顯示(),則它已經適當所示的圖像,但打印頁來了空白。請求你請看看上面的代碼,並糾正我在哪裏做錯了。

問候, Lekhraj

+1

如果你正確地設計你的代碼,你可能會讓更多的人對你的問題感興趣。 – karlphillip

回答

6

您加載某些PNG文件到文件名。然後你設置QPrinter打印到printer.setOutputFileName(fileName);那個PNG文件。我想這是錯誤的,它應該是一些不同的pdf文件。

我不知道我是否明白你想要做什麼?如何使用QPrinter打印圖像文件?進入pdf文件?爲什麼試圖使用QWebView? 您可以使用QImage加載圖像文件,然後使用QPainter上的QPainter進行繪製。

#include <QtGui> 
#include <QtCore> 

int main(int argc, char** argv) { 
     QApplication app(argc, argv); 

     QString fileName = QFileDialog::getOpenFileName(0,"Open File",QString(),"PNG File(*.png)"); 

     QPrinter printer; 
     QPrintDialog *dlg = new QPrintDialog(&printer,0); 
     if(dlg->exec() == QDialog::Accepted) { 
       QImage img(fileName); 
       QPainter painter(&printer); 
       painter.drawImage(QPoint(0,0),img); 
       painter.end(); 
     } 

     delete dlg; 

     QTimer::singleShot(1, &app, SLOT(quit())); 
     app.exec(); 
     return 0; 
} 

你的一些問題可能與您的其他問題 https://stackoverflow.com/questions/8297239/how-to-print-pdf-file-in-qt

+0

親愛的盧卡斯,我不想打印使用Qprinter在PDF文件上的圖像文件,而是想打印我現有的圖像文件。例如: - 我有一個名爲「test.png」的圖像文件,我有一臺打印機machine.now我想那whenevr我運行這個程序的圖像文件去打印機機器和打印機已打印此圖像file.Please讓我告訴如果問題仍然不清楚。 – lekhraj

+0

親愛的Lekhraj,我編輯了代碼。你能檢查它是否適用於你? 它應該展開對話框來打開PNG文件,然後顯示對話框來選擇和配置打印機,當您單擊確定時,應打印選定的圖像。 – LukasT

+0

親愛的盧卡斯,它的工作非常好,現在我可以打印出PNG文件。但我也想對PDF文件執行相同的操作,但在PDF的情況下它不工作。如果您有任何想法,然後請求您請給我一些提示。 – lekhraj

1

您嘗試打印您調用它的load()函數後立即QWebView重疊。但QWebView尚未加載內容,因此視圖爲空白。您需要將QWebView的loadFinished信號連接到可以調用print()函數的某個插槽。閱讀QWebView's documentation