Вы вводите в заблуждение понятия: loadFinished является сигналом, и выполнение if(&QWebEnginePage::loadFinished)
не имеет смысла (я рекомендую вам пересмотреть базовые c понятия сигналов и слотов, так как это основа Qt: https://doc.qt.io/qt-5/signalsandslots.html ).
С другой стороны, нет необходимости загружать html в виде файла, поскольку вы можете передать ему URL.
С учетом вышеизложенного, следующий код тривиальный пример печати:
#include <QtWebEngineWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWebEnginePage page;
QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPrinter::A4);
printer.setFullPage(true);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("somefile.pdf");
QObject::connect(&page, &QWebEnginePage::loadFinished, [&page, &printer](bool ok){
if(ok){
page.print(&printer, [](bool ok){
qDebug() << "printed " << ok;
QCoreApplication::quit();
});
}
else{
qDebug() << "Html Not loaded";
QCoreApplication::exit(-1);
}
});
page.load(QUrl::fromLocalFile("/home/hackerpoint/Desktop/some.html"));
return a.exec();
}
ОБНОВЛЕНИЕ:
Класс принтера
#ifndef PRINTER_H
#define PRINTER_H
#include <QObject>
#include <QPrinter>
#include <QWebEnginePage>
class Printer: public QObject
{
Q_OBJECT
public:
enum PrinterError{
NoError = 0,
LoadError,
PrintError
};
Q_ENUM(PrinterError);
Printer(QObject *parent=nullptr);
public Q_SLOTS:
void print(const QString & html, const QUrl &baseUrl=QUrl());
void print(const QUrl & url);
Q_SIGNALS:
void finished();
void error(PrinterError error);
private Q_SLOTS:
void onFinished(bool ok);
private:
QPrinter printer;
QWebEnginePage page;
};
#endif // PRINTER_H
#include "printer.h"
Printer::Printer(QObject *parent):QObject(parent)
{
printer.setResolution(QPrinter::HighResolution);
printer.setPageSize(QPrinter::A4);
printer.setFullPage(true);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("somefile.pdf");
connect(&page, &QWebEnginePage::loadFinished, this, &Printer::onFinished);
}
void Printer::print(const QString &html, const QUrl & baseUrl)
{
page.setHtml(html, baseUrl);
}
void Printer::print(const QUrl &url)
{
page.load(url);
}
void Printer::onFinished(bool ok)
{
if(ok){
page.print(&printer, [this](bool ok){
if(ok)
Q_EMIT finished();
else
Q_EMIT error(PrintError);
});
}
else
Q_EMIT error(LoadError);
}
Класс MainWindow:
// ...
private slots:
void on_pushButton_clicked();
void printError(Printer::PrinterError error);
void printFinished();
private:
Ui::MainWindow *ui;
Printer printer;
// ...
// ...
ui->setupUi(this);
connect(&printer, &Printer::finished, this, &MainWindow::printFinished);
connect(&printer, &Printer::error, this, &MainWindow::printError);
// ...
void MainWindow::on_pushButton_clicked()
{
printer.print(QUrl::fromLocalFile("/home/hackerpoint/Desktop/some.html"));
}
void MainWindow::printError(Printer::PrinterError error)
{
if(error == Printer::LoadError){
qDebug() << "Html Not loaded";
}
else if(error == Printer::PrintError){
qDebug() << "Html Not printed";
}
}
void MainWindow::printFinished()
{
qDebug() << "printed";
}