2

I use the following code in a QWebEngineView object to capture a web page to an image:

image=new QImage(w,h, QImage::Format_ARGB32);
painter = new QPainter(image);
render(painter);
image->save(imagefilename);

Unfortunately, it only renders part of the web page that is shown on the widget to the image. How to render the whole page to the image?

William
  • 761
  • 2
  • 10
  • 27

1 Answers1

1

It is possible to hide webview and resize it to show the whole web page. I'm using PyQt5 (version 5.12), but the idea should apply to C++ Qt as well:

# Create hidden QWebEngineView
view.setAttribute(Qt.WA_DontShowOnScreen)
view.show()
...

# Resize the view and then capture image
def take_screenshot():
    view.grab().save(output_file, b'PNG')

size = view.page().contentsSize().toSize()
view.resize(size)
QTimer.singleShot(1000, take_screenshot)
xuhcc
  • 2,400
  • 24
  • 23