diff options
Diffstat (limited to 'examples/webenginewidgets/printme')
-rw-r--r-- | examples/webenginewidgets/printme/CMakeLists.txt | 53 | ||||
-rw-r--r-- | examples/webenginewidgets/printme/data/data.qrc | 1 | ||||
-rw-r--r-- | examples/webenginewidgets/printme/data/icon.svg | 24 | ||||
-rw-r--r-- | examples/webenginewidgets/printme/data/index.html | 2 | ||||
-rw-r--r-- | examples/webenginewidgets/printme/data/style.css | 104 | ||||
-rw-r--r-- | examples/webenginewidgets/printme/doc/images/printme-example.png | bin | 42074 -> 29055 bytes | |||
-rw-r--r-- | examples/webenginewidgets/printme/doc/src/printme.qdoc | 55 | ||||
-rw-r--r-- | examples/webenginewidgets/printme/main.cpp | 58 | ||||
-rw-r--r-- | examples/webenginewidgets/printme/printhandler.cpp | 95 | ||||
-rw-r--r-- | examples/webenginewidgets/printme/printhandler.h | 62 |
10 files changed, 167 insertions, 287 deletions
diff --git a/examples/webenginewidgets/printme/CMakeLists.txt b/examples/webenginewidgets/printme/CMakeLists.txt new file mode 100644 index 000000000..2d071903c --- /dev/null +++ b/examples/webenginewidgets/printme/CMakeLists.txt @@ -0,0 +1,53 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) +project(printme LANGUAGES CXX) + +set(CMAKE_AUTOMOC ON) + +if(NOT DEFINED INSTALL_EXAMPLESDIR) + set(INSTALL_EXAMPLESDIR "examples") +endif() + +set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/webenginewidgets/printme") + +find_package(Qt6 REQUIRED COMPONENTS Core Gui PrintSupport WebEngineWidgets) + +qt_add_executable(printme + main.cpp + printhandler.cpp printhandler.h +) + +set_target_properties(printme PROPERTIES + WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE TRUE +) + +target_link_libraries(printme PUBLIC + Qt::Core + Qt::Gui + Qt::PrintSupport + Qt::WebEngineWidgets +) + +# Resources: +set(data_resource_files + "data/index.html" + "data/style.css" +) + +qt_add_resources(printme "data" + PREFIX + "/" + BASE + "data" + FILES + ${data_resource_files} +) + +install(TARGETS printme + RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" + LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +) diff --git a/examples/webenginewidgets/printme/data/data.qrc b/examples/webenginewidgets/printme/data/data.qrc index a9c76cc7e..b5e0b1fe0 100644 --- a/examples/webenginewidgets/printme/data/data.qrc +++ b/examples/webenginewidgets/printme/data/data.qrc @@ -2,6 +2,5 @@ <qresource prefix="/"> <file>index.html</file> <file>style.css</file> - <file>icon.svg</file> </qresource> </RCC> diff --git a/examples/webenginewidgets/printme/data/icon.svg b/examples/webenginewidgets/printme/data/icon.svg deleted file mode 100644 index b90ff26dd..000000000 --- a/examples/webenginewidgets/printme/data/icon.svg +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - width="94px" height="94px" viewBox="0 0 94 94" enable-background="new 0 0 94 94" xml:space="preserve"> -<g> - <circle fill="none" cx="47" cy="47" r="47"/> - <g> - <path fill="#46A2DA" d="M47,92.979c-11.779,0-23.559-4.484-32.526-13.451C-3.461,61.591-3.461,32.409,14.472,14.474 - C32.41-3.463,61.592-3.461,79.526,14.473c17.935,17.936,17.935,47.119,0.002,65.054l-0.002,0.001 - C70.559,88.495,58.779,92.979,47,92.979z"/> - </g> - <path fill="#80C342" d="M93,47C93,21.595,72.405,1,47,1C34.297,1,22.797,6.149,14.473,14.473l65.054,65.054 - C87.851,71.203,93,59.703,93,47z"/> - <g> - <path fill="#46A2DA" d="M47,65c-4.808,0-9.328-1.873-12.728-5.272c-7.018-7.019-7.018-18.438,0-25.456 - C37.672,30.873,42.192,29,47,29s9.328,1.873,12.728,5.272c7.018,7.019,7.018,18.438,0,25.456C56.328,63.127,51.808,65,47,65z"/> - <path fill="#FFFFFF" d="M62.248,59.919c6.671-7.858,6.312-19.644-1.105-27.061C57.237,28.953,52.118,27,47,27 - c-5.118,0-10.237,1.953-14.142,5.858c-7.81,7.81-7.81,20.474,0,28.284C36.763,65.047,41.882,67,47,67 - c4.379,0,8.752-1.441,12.372-4.3L77.88,81.209c0.989-0.895,1.935-1.837,2.843-2.814L62.248,59.919z M35.686,58.314 - c-6.238-6.238-6.238-16.389,0-22.627C38.708,32.664,42.726,31,47,31c4.274,0,8.292,1.664,11.314,4.686 - c6.238,6.238,6.238,16.389,0,22.627C55.292,61.336,51.274,63,47,63C42.726,63,38.708,61.336,35.686,58.314z"/> - </g> -</g> -</svg> diff --git a/examples/webenginewidgets/printme/data/index.html b/examples/webenginewidgets/printme/data/index.html index cf286e85a..865152c1d 100644 --- a/examples/webenginewidgets/printme/data/index.html +++ b/examples/webenginewidgets/printme/data/index.html @@ -12,13 +12,13 @@ </head> <body> <form class="form"> - <img class="logo" src="icon.svg" alt="qtwebengine"> <div class="header"> <h1>Hello Paper World!</h1> <h2>Press Ctrl+p to print with print preview</h2> <h2>Press Ctrl+Shift+p to print without print preview</h2> <h2>Click the button to print using JavaScript</h2> <p class="button" onclick="printNow()">Print Now</p> + </div> </form> </body> </html> diff --git a/examples/webenginewidgets/printme/data/style.css b/examples/webenginewidgets/printme/data/style.css index cf6a2b7bf..af8b70fda 100644 --- a/examples/webenginewidgets/printme/data/style.css +++ b/examples/webenginewidgets/printme/data/style.css @@ -1,72 +1,74 @@ +@import url('https://fonts.googleapis.com/css2?family=Titillium+Web:ital,wght@0,200;0,300;0,400;0,600;0,700;0,900;1,200;1,300;1,400;1,600;1,700&display=swap'); +* { + padding: 0; + margin: 0; + box-sizing: border-box; +} + html,body { - height:100%; - width:100%; - margin:0; + height: 100%; + width: 100%; } + body { - display:flex; -} - .logo { - width: 75px; - height: 75px; - float: left; - margin: 20px 20px 0px 20px; - -webkit-animation:spin 8s linear infinite; -} - @-webkit-keyframes spin { - 100% { - -webkit-transform: rotate(360deg); - } + display: flex; } + .header { display: inline } + .form { - width: 480px; - height: 170px; - background: -webkit-linear-gradient(bottom, #ddd, #fff); - border: 1px solid #999; - border-radius: 12px; + width: 50%; + background: #fff; + border: 0.5px solid #999; + border-radius: 8px; color: #46a; - font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif; - font-size: 14px; - font-style: italic; - font-weight: bold; + font-family: 'Titillium Web', sans-serif; + font-size: 1rem; margin: auto; - padding: 10px; + padding: 1.5rem; position: relative; - line-height: 26px; text-decoration: none; - -webkit-box-shadow: 0px 0px 5px #444; } - h1 { - padding-left:40px; - color: #46a2da; + +h1 { + color: #00414A; + font-size: 2.5rem; + font-weight: 700; + margin-top: -0.85rem; + margin-bottom: 2rem; } - h2 { - color: #80c342; - font-size: 13px; - margin-top: -20px; -} - span { - margin-left: 20px; + +h2 { + color: #00414A; + font-size: 1.125rem; + font-weight: 400; + font-style: italic; + margin-bottom: 1rem; } + .button{ - display: inline-block; - background: #46a2da; - width: 100px; - height: 30px; - padding: 0px; - text-align: center; - font-weight: bold; - color: #ffffff; - text-decoration: none; - border: 1px solid #999; - margin-left: 190px; + display: flex; + align-items: center; + justify-content: center; + padding: 0.4444em 0.8889em; + height: 2.4em; + cursor: pointer; + background: #00414A; + color: #fff; + border-radius: 4px; + margin-top: 2rem; + font-family: 'Titillium Web', sans-serif; + font-size: 1.125rem; + font-weight: 400; + transition: color 300ms ease-out, border 300ms ease-out; } + .button:hover { - background-color: #46a200 + background: #19545C; } + .button:active { - background-color: #3e8e41; + background-color: #19545C; } diff --git a/examples/webenginewidgets/printme/doc/images/printme-example.png b/examples/webenginewidgets/printme/doc/images/printme-example.png Binary files differindex a636972fd..dac4e61e6 100644 --- a/examples/webenginewidgets/printme/doc/images/printme-example.png +++ b/examples/webenginewidgets/printme/doc/images/printme-example.png diff --git a/examples/webenginewidgets/printme/doc/src/printme.qdoc b/examples/webenginewidgets/printme/doc/src/printme.qdoc index d05d5147b..91aecf6de 100644 --- a/examples/webenginewidgets/printme/doc/src/printme.qdoc +++ b/examples/webenginewidgets/printme/doc/src/printme.qdoc @@ -1,32 +1,9 @@ -/**************************************************************************** -** -** Copyright (C) 2019 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2019 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! - \example webenginewidgets/printme + \example webenginewidgets/printme + \examplecategory {Web Technologies} \title WebEngine Widgets PrintMe Example \ingroup webengine-widgetexamples \brief Demonstrates how to print web pages using Qt WebEngine Widgets. @@ -66,8 +43,8 @@ \section1 Print Handler - In the \c{PrintHandler} function, we first implement \c{printPreview()}, - where we instantiate \l{QPrinter} together with \l{QPrintPreviewDialog}. + In the \c{PrintHandler} class, we first implement \c{printPreview()}, + where we instantiate \l{QPrintPreviewDialog}. We need the \l{QPrintPreviewDialog::paintRequested} handle to generate a set of preview pages. @@ -77,16 +54,26 @@ Now we can implement the \c{PrintHandler::printDocument()} slot, which is called in response to the \l{QPrintPreviewDialog::paintRequested} signal. + To do actual painting on a printer, we call the \l QWebEngineView::print() + function. Printing is an async operation in Chromium, but not in Qt, so we + run a local event loop using \l{QEventLoop::exec()} to make sure printing + is done before returning. User input is blocked, since clicking on a button + while we're waiting for the print to finish can mess up the internal state + and cause a crash. \quotefromfile webenginewidgets/printme/printhandler.cpp \skipto PrintHandler::printDocument( \printuntil /^\}/ - To do actual painting on a printer, we call the \l{QWebEnginePage::print()} - function. Because this call blocks the main event loop, we need to create - a local one. We begin the local event loop by calling - \l{QEventLoop::exec()}. When the local event loop terminates, - we check for \c{result} and report any errors that occurred. + To get notified about the result of printing job, we implement + \c{PrintHandler::printFinished()} slot as handler of + \l QWebEngineView::printFinished() signal. We check for \c{success} and + report any errors that occurred. Finally, we call \l{QEventLoop::quit()} + to exit out of the local event loop. + + \quotefromfile webenginewidgets/printme/printhandler.cpp + \skipto PrintHandler::printFinished( + \printuntil /^\}/ The last function we implement, \c{PrintHandler::print()}, is trivial, because it simply opens \l{QPrintDialog} and calls the previously diff --git a/examples/webenginewidgets/printme/main.cpp b/examples/webenginewidgets/printme/main.cpp index e4d6d9dc8..46f44ccb6 100644 --- a/examples/webenginewidgets/printme/main.cpp +++ b/examples/webenginewidgets/printme/main.cpp @@ -1,52 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2018 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "printhandler.h" #include <QApplication> @@ -55,7 +8,6 @@ int main(int argc, char *argv[]) { - QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv); QWebEngineView view; @@ -64,10 +16,10 @@ int main(int argc, char *argv[]) view.show(); PrintHandler handler; - handler.setPage(view.page()); + handler.setView(&view); - auto printPreviewShortCut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_P), &view); - auto printShortCut = new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_P), &view); + auto printPreviewShortCut = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_P), &view); + auto printShortCut = new QShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_P), &view); QObject::connect(printPreviewShortCut, &QShortcut::activated, &handler, &PrintHandler::printPreview); QObject::connect(printShortCut, &QShortcut::activated, &handler, &PrintHandler::print); diff --git a/examples/webenginewidgets/printme/printhandler.cpp b/examples/webenginewidgets/printme/printhandler.cpp index d8c4fc177..9f8f6ee0b 100644 --- a/examples/webenginewidgets/printme/printhandler.cpp +++ b/examples/webenginewidgets/printme/printhandler.cpp @@ -1,113 +1,66 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2018 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #include "printhandler.h" -#include <QEventLoop> #include <QPrintDialog> -#include <QPrinter> #include <QPainter> #include <QPrintPreviewDialog> -#include <QWebEnginePage> +#include <QWebEngineView> PrintHandler::PrintHandler(QObject *parent) : QObject(parent) { - + m_printer.setResolution(300); } -void PrintHandler::setPage(QWebEnginePage *page) +void PrintHandler::setView(QWebEngineView *view) { - Q_ASSERT(!m_page); - m_page = page; - connect(m_page, &QWebEnginePage::printRequested, this, &PrintHandler::printPreview); + 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_page->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; - auto printPreview = [&](bool success) { result = success; loop.quit(); }; - m_page->print(printer, std::move(printPreview)); - loop.exec(); - if (!result) { + m_view->print(printer); + // User input in the print preview dialog while we're waiting on a print task + // can mess up the internal state and cause a crash. + m_waitForResult.exec(QEventLoop::ExcludeUserInputEvents); +} + +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() { - if (!m_page) + if (!m_view) return; if (m_inPrintPreview) return; m_inPrintPreview = true; - QPrinter printer; - QPrintPreviewDialog preview(&printer, m_page->view()); + QPrintPreviewDialog preview(&m_printer, m_view); connect(&preview, &QPrintPreviewDialog::paintRequested, this, &PrintHandler::printDocument); preview.exec(); diff --git a/examples/webenginewidgets/printme/printhandler.h b/examples/webenginewidgets/printme/printhandler.h index 69b71f4a8..ab9a8c3a4 100644 --- a/examples/webenginewidgets/printme/printhandler.h +++ b/examples/webenginewidgets/printme/printhandler.h @@ -1,62 +1,17 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2018 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause #ifndef PRINTHANDLER_H #define PRINTHANDLER_H +#include <QEventLoop> #include <QObject> +#include <QPrinter> QT_BEGIN_NAMESPACE class QPainter; class QPrinter; -class QWebEnginePage; +class QWebEngineView; QT_END_NAMESPACE class PrintHandler : public QObject @@ -64,15 +19,18 @@ class PrintHandler : public QObject Q_OBJECT public: PrintHandler(QObject *parent = nullptr); - void setPage(QWebEnginePage *page); + void setView(QWebEngineView *view); public slots: void print(); void printPreview(); void printDocument(QPrinter *printer); + void printFinished(bool success); private: - QWebEnginePage *m_page = nullptr; + QWebEngineView *m_view = nullptr; + QPrinter m_printer; + QEventLoop m_waitForResult; bool m_inPrintPreview = false; }; |