Как печатать используя qwebview используя qt

При доступе по ссылке из браузера есть кнопка печати, и при нажатии на нее отобразится функция печати. И я не могу сделать это в моей программе, имеющей qwebview. Я использую qt4.7.3 в Ubuntu 11.04.

1

Решение

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);
}
};
2

Другие решения

я использовал ответ от Кубы Обер и использовал его в моем проекте следующим образом:

.ui файл содержит QWebView с именем «webView», вы можете просто создать его в QtCreator’s Режим дизайна .

Содержание .h файл

#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;
};

Содержание .cpp файл

#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

По вопросам рекламы [email protected]