내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
QWebEnginePage
웹 콘텐츠 처리를 위한 인터페이스를 제공하는 Qt WebEngine 모듈의 클래스입니다.인쇄하고 싶다면QWebEnginePage
콘텐츠를 사용할 수 있습니다.QPrinter
그리고QPrintDialog
구현하는 클래스입니다.
프로젝트는 Qt WebEngine 모듈로 구성되며 .pro 파일에 해당 구성이 포함됩니다.
QT += webenginewidgets
참고로 구현 코드는 다음과 같습니다.
printme « webenginewidgets « 예제 - qt/qtwebengine.git - Qt WebEngine
main.cpp
- #include "printhandler.h"
- #include <QApplication>
- #include <QShortcut>
- #include <QWebEngineView>
-
- int main(int argc, char *argv[])
- {
- QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
- QApplication app(argc, argv);
-
- view.setUrl(QUrl(QStringLiteral("qrc:/index.html")));
- view.resize(1024, 750);
- view.show();
-
- PrintHandler handler;
- handler.setPage(view.page());
-
- 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);
-
- return app.exec();
- }
프린트핸들러.h
- #ifndef PRINTHANDLER_H
- #define PRINTHANDLER_H
- #include <qapplication.h>
- #include <QObject>
- #include <QWebEngineView>
- #include <QPrinter>
- #include <QPrintPreviewDialog>
- #include <QEventLoop>
- #include <QPrintDialog>
- #include <QWidget>
- #include <QMainWindow>
- #include <QPrinterInfo>
- #include "CustomWebEnginePage.h"
- #include <qapplication.h>
- #include <qtimer.h>
- class PrintHandler : public QObject
- {
- Q_OBJECT
- public:
- explicit PrintHandler(QString printName, QObject *parent = nullptr);
-
- signals:
-
- public slots:
-
- public:
- void setPrintUrl(const QString& url);
- void setPrintName(const QString& name);
- void printPreview();
- void printDocument(QPrinter *printer);
- void print();
- private:
- //void print();
- private:
- QString mPrinterName;
- CustomWebEnginePage* mPage;
- QString mUrl;
- bool mInPrintPreview;
- QTimer* waitTimer;
- };
-
- #endif // PRINTHANDLER_H
인쇄 핸들러.cpp
- #include "printhandler.h"
- #include <QDebug>
- PrintHandler::PrintHandler(QString printName,QObject *parent) : mPrinterName(printName),QObject(parent)
- {
- mInPrintPreview=false;
- mPage = new CustomWebEnginePage();
- waitTimer = new QTimer();
- waitTimer->setInterval(500);
- waitTimer->setSingleShot(true);
- connect(waitTimer, &QTimer::timeout, this, &PrintHandler::print);
- connect(mPage, &CustomWebEnginePage::loadFinished, waitTimer, static_cast<void(QTimer::*)()>(&QTimer::start));
-
- }
-
- void PrintHandler::setPrintUrl(const QString& url)
- {
- mUrl = url;
- mPage->setUrl(url);
- }
-
- void PrintHandler::printPreview()
- {
- if (!mPage)
- return;
- if (mInPrintPreview)
- return;
- mInPrintPreview = true;
- QPrinter printer;
- QPrintPreviewDialog preview(&printer, mPage->view());
- connect(&preview, &QPrintPreviewDialog::paintRequested,
- this, &PrintHandler::printDocument);
- preview.exec();
- mInPrintPreview = false;
- }
-
-
- void PrintHandler::printDocument(QPrinter *printer)
- {
- QEventLoop loop;
- bool result;
- auto printPreview = [&](bool success) { result = success; loop.quit(); };
- mPage->print(printer, std::move(printPreview));
- loop.exec();
- if (!result) {
- QPainter painter;
- if (painter.begin(printer)) {
- QFont font = painter.font();
- font.setPixelSize(15);
- painter.setFont(font);
- painter.drawText(QPointF(10,25),QStringLiteral("Could not generate print preview."));
-
- painter.end();
- }
- }
- }
- void PrintHandler::setPrintName(const QString& name)
- {
- mPrinterName = name;
- }
-
-
-
- void PrintHandler::print()
- {
- QStringList printerNameList=QPrinterInfo::availablePrinterNames();
- foreach (QString printerStr, printerNameList)
- {
- if(printerStr== mPrinterName)
- {
- QPrinter printer(QPrinter::HighResolution);
- printer.setOutputFormat(QPrinter::NativeFormat);
-
- printer.setPrinterName(printerStr);
- //打印界面
- /* QPrintDialog dialog(&printer, mPage->view());
- if (dialog.exec() != QDialog::Accepted)
- return;*/
- printDocument(&printer);
- return;
- }
- }
- qDebug() << "not find printer";
-
-
- }
HTTPS URL 연결의 경우 "연결이 전용 연결이 아닙니다."라는 경고가 표시됩니다. 이 경고를 건너뛰어야 하므로 QWebEnginePage를 상속받아 클래스를 만들어야 합니다.
CustomWebEnginePage.h
- #pragma once
-
- #include <QWebEnginePage>
-
- class CustomWebEnginePage : public QWebEnginePage
- {
- Q_OBJECT
-
- public:
- CustomWebEnginePage();
- ~CustomWebEnginePage();
- virtual bool certificateError(const QWebEngineCertificateError &certificateError);
- };
커스텀웹엔진페이지.cpp
- #include "CustomWebEnginePage.h"
-
- CustomWebEnginePage::CustomWebEnginePage()
- {
- }
-
- CustomWebEnginePage::~CustomWebEnginePage()
- {
- }
-
-
- bool CustomWebEnginePage::certificateError(const QWebEngineCertificateError &certificateError)
- {
- return true;
- }