Qt WebEngineView отображает пустое изображение

Я использую qt 5.6.2. Я хотел бы сделать снимок экрана на веб-странице. Вот код, который я использую:

#include <QtWidgets/QApplication>
#include <QtWebEngineWidgets/QWebEngineView>

int main(int argc, char *argv[]){
    int left, top, width, height;
    left = 0;
    top = 0;
    width = 600;
    height = 800;

    QApplication a(argc, argv);
    QWebEngineView* w = new QWebEngineView();
    QImage image(height, width, QImage::Format_RGB32);
    QRegion rg(left, top, width, height);
    QPainter painter(&image);
    w->page()->load(QUrl("https://www.yahoo.com"));
    w->show();
    w->page()->view()->render(&painter, QPoint(), rg);
    painter.end();
    image.save("test.png", "PNG", 80);

    return a.exec();
}

Запускаю программу, появляется окно, я вижу содержимое yahoo. Затем я сохраняю результат в test.png, но это белое изображение. Я не могу сохранить результат в image или я не могу сохранить результат из image в файл test.png и как это исправить?


person sflee    schedule 19.02.2018    source источник


Ответы (1)


Вам нужно дождаться завершения загрузки страницы.

QWebEngineView* w = new QWebEngineView();
w->page()->load(QUrl("https://www.yahoo.com"));
w->show();


QObject::connect(w, &QWebEngineView::loadFinished,
                 [w](bool bOk)
{
    int left, top, width, height;
    left = 0;
    top = 0;
    width = 600;
    height = 800;

    QImage image(height, width, QImage::Format_RGB32);
    QRegion rg(left, top, width, height);
    QPainter painter(&image);
    w->page()->view()->render(&painter, QPoint(), rg);
    painter.end();
    image.save("test.png", "PNG", 80);
});
person Simon    schedule 19.02.2018
comment
Спасибо за ответ, я боролся. - person A. Mashreghi; 29.04.2020