2014-01-21 133 views
1

從瀏覽器訪問鏈接時,有一個打印按鈕,當您單擊它時,將顯示功能打印。而且我不能在我的程序上做這個qwebview。我在Ubuntu 11.04上使用qt4.7.3。如何使用qt使用qwebview打印

回答

2

QWebView有一個void print(QPrinter * printer) const方法。要顯示打印對話框,您需要使用QPrintDialog類。

您需要將QAction或某些其他信號連接到顯示打印對話框的插槽,並將另一個插槽連接到對話框的accepted信號。

class MyWindow : public QWidget { 
    Q_OBJECT 
    QWebView * m_webView; 
    QScopedPointer<QPrinter> m_printer; 
    ... 
    Q_SLOT void showPrintDialog() { 
     if (!m_printer) m_printer.reset(new QPrinter); 
     QScopedPointer<QPrintDialog> dialog(new QPrintDialog(m_printer.data(), this)); 
     dialog->setAttribute(Qt::WA_DeleteOnClose); 
     connect(dialog.data(), SIGNAL(accepted(QPrinter*)), SLOT(print(QPrinter*))); 
     dialog->show(); 
     dialog.take(); // The dialog will self-delete 
    } 
    Q_SLOT void print(QPrinter* printer) { 
     m_webView->print(printer); 
    } 
}; 
0

我以前the answer from Kuba Ober,並用它在我的項目如下:

.ui文件包含一個名爲「web視圖」 QWebView,你可以簡單地在QtCreator的設計模式創建此。

內容文件

內容的 .cpp文件
#include <QDialog> 
#include <QPrinter> 
#include <QPrintDialog> 

namespace Ui { 
class myclassname; 
} 

class myclassname : public QDialog 
{ 
    Q_OBJECT 

public: 
    explicit myclassname(QWidget *parent = 0); 
    ~myclassname(); 

private slots: 
    void print(QPrinter* printer); 

    void on_pushButton_print_clicked(); 

private: 
    Ui::myclassname *ui; 
    QScopedPointer<QPrinter> m_printer; 
}; 

.h

#include "myclassname.h" 
#include "ui_myclassname.h" 

myclassname::myclassname(QWidget *parent) : 
    QDialog(parent), 
    ui(new Ui::myclassname) 
{ 
    ui->setupUi(this); 
    ui->webView->load(QUrl("https://stackoverflow.com/questions/21260463/how-to-print-using-qwebview-using-qt")); 
} 

myclassname::~myclassname() 
{ 
    delete ui; 
} 

void myclassname::print(QPrinter* printer) 
{ 
    ui->webView->print(printer); 
} 

void myclassname::on_pushButton_print_clicked() 
{ 
    if (!m_printer) m_printer.reset(new QPrinter); 
    QScopedPointer<QPrintDialog> dialog(new QPrintDialog(m_printer.data(), this)); 
    dialog->setAttribute(Qt::WA_DeleteOnClose); 
    connect(dialog.data(), SIGNAL(accepted(QPrinter*)), SLOT(print(QPrinter*))); 
    dialog->show(); 
    dialog.take(); // The dialog will self-delete 
} 

謝謝@KubaOber

+0

我發現我的QWebView的背景留下 '灰色',而這種不必要的使用墨水。我通過在構造函數中添加'ui-> webView-> setStyleSheet(「background-color:white」)來解決問題,就在行ui-> webView-> load(QUrl ...) – Wim