diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2021-08-27 13:24:42 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-08-30 21:52:29 +0000 |
commit | cd1ddd3450e2e9d708cecd814cc356a44fe0282a (patch) | |
tree | 87e8d65270e1425a2db9aead0a6bc00634536f28 /examples/webenginewidgets/printme/printhandler.cpp | |
parent | 7f31695d2b8c1276cb93b4e94edaf740ddd8f90c (diff) |
Fix crash in PrintMe example
Connecting the same lambda slot multiple times to QWebEngineView::printFinished
causes crash. Fix this by a minor refactoration and adjust documentation.
Task-number: QTBUG-95339
Change-Id: I03b6a1ff6244c80073248182a905d8d664fdd326
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
(cherry picked from commit e3679c1a8316b70fb6b8a0f85fdd06443de8b409)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'examples/webenginewidgets/printme/printhandler.cpp')
-rw-r--r-- | examples/webenginewidgets/printme/printhandler.cpp | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/examples/webenginewidgets/printme/printhandler.cpp b/examples/webenginewidgets/printme/printhandler.cpp index 200f2f302..283a6657c 100644 --- a/examples/webenginewidgets/printme/printhandler.cpp +++ b/examples/webenginewidgets/printme/printhandler.cpp @@ -49,9 +49,7 @@ ****************************************************************************/ #include "printhandler.h" -#include <QEventLoop> #include <QPrintDialog> -#include <QPrinter> #include <QPainter> #include <QPrintPreviewDialog> #include <QWebEngineView> @@ -59,7 +57,7 @@ PrintHandler::PrintHandler(QObject *parent) : QObject(parent) { - + m_printer.setResolution(300); } void PrintHandler::setView(QWebEngineView *view) @@ -67,36 +65,37 @@ void PrintHandler::setView(QWebEngineView *view) Q_ASSERT(!m_view); m_view = view; connect(view, &QWebEngineView::printRequested, this, &PrintHandler::printPreview); + connect(view, &QWebEngineView::printFinished, this, &PrintHandler::printFinished); } void PrintHandler::print() { - QPrinter printer(QPrinter::HighResolution); - QPrintDialog dialog(&printer, m_view); + QPrintDialog dialog(&m_printer, m_view); if (dialog.exec() != QDialog::Accepted) return; - printDocument(&printer); + printDocument(&m_printer); } void PrintHandler::printDocument(QPrinter *printer) { - QEventLoop loop; - bool result; - connect(m_view, &QWebEngineView::printFinished, [&](bool success) { result = success; loop.quit(); }); m_view->print(printer); - loop.exec(); - if (!result) { + m_waitForResult.exec(); +} + +void PrintHandler::printFinished(bool success) +{ + if (!success) { QPainter painter; - if (painter.begin(printer)) { + if (painter.begin(&m_printer)) { QFont font = painter.font(); font.setPixelSize(20); painter.setFont(font); painter.drawText(QPointF(10,25), QStringLiteral("Could not generate print preview.")); - painter.end(); } } + m_waitForResult.quit(); } void PrintHandler::printPreview() @@ -106,9 +105,7 @@ void PrintHandler::printPreview() if (m_inPrintPreview) return; m_inPrintPreview = true; - QPrinter printer; - printer.setResolution(300); - QPrintPreviewDialog preview(&printer, m_view); + QPrintPreviewDialog preview(&m_printer, m_view); connect(&preview, &QPrintPreviewDialog::paintRequested, this, &PrintHandler::printDocument); preview.exec(); |