从QWebKit
到QWebEngine
的迁移似乎比Qt人员声称的要复杂得多。使用QWebKit,我可以通过
QWebView->print(&printer);
对于QWebEngine
类,QWebEngine
视图不提供print()
方法。他们的浏览器示例使用了一个名为QWebEngineFrame
的类,它提供了一个方法print()
——但是整个QWebEngineFrame
没有在任何地方定义!
所以我的问题:我如何使用QWebEngine
打印页面?
我认为正确的方法是使用QWebEngineView::render
方法,因为QWebEngineView
是QWidget
。它接受paint device作为第一个参数,你可以在那里传递QPrinter
用于打印。
Update:如果您可以使用最新版本的Qt,在Qt 5.8中添加了一个打印页面的新功能:
void QWebEnginePage::print(QPrinter *printer, FunctorOrLambda resultCallback);
实际上它首先打印到QPrinter
设置的临时PDF。
Qt文档的链接。
你也可以在我们的博客上读到。
我将提供以下代码(暂时):
QTextEdit *textEdit = new QTextEdit;
ui.myWebView->page()->toHtml([textEdit](const QString &result){ textEdit->setHtml(result); });
textEdit->print(somerinter);
textEdit->deleteLater();
Qt 5.7支持QWebEngine的pdf文件打印。
使用printToPdf函数将当前页面导出为pdf文件。例子:
const QString fileName = QFileDialog::getSaveFileName(0,
tr("Save pdf"),
".",
tr("PDF Files (*.pdf)"));
if (fileName.isEmpty()) {
return;
}
ui->webView->page()->printToPdf(fileName);
QWebView->page()->print(&printer, [=](bool){});