2012-01-31 12 views
7

używam Qt (wyszukane przykład przeglądarka z twórcą Qt), aby utworzyć zrzut ekranu stron internetowych przy użyciu tego kodu (podjęte i przekształcony z here):Tworzenie cały zrzut ekranu strony używając QWebPage

QImage *image = new QImage(view->page()->mainFrame()->contentsSize(), QImage::Format_ARGB32); 
QPainter *painter = new QPainter(image); 

view->page()->mainFrame()->render(painter); 

painter->end(); 
image->save(view->title() + "png"); 

Ale tworzy tylko zrzut ekranu widocznej części strony (widok portu).

Jeśli dodaję tę linię na początku, zrzut ekranu jest tworzony z całej strony, ale problem polega na tym, że dodaje on nowy pasek przewijania przy każdym ładowaniu strony.

view->page()->setViewportSize(view->page()->mainFrame()->contentsSize()); 

Każdy pomysł, jak to naprawić?

Odpowiedz

11

Wystarczy wyłączyć paski przewijania:

page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); 
page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); 

Pełną przykład, wykorzystać to, co opisałem 3,5 roku temu w Capturing web pages blogu. Odtąd repozytorium kodu zostało przeniesione do http://qt.gitorious.org/qt-labs/graphics-dojo.

Jeśli zwracasz uwagę na powyższy przykład, nie ma potrzeby tworzenia QWebView. Możesz całkowicie pracować tylko z instancji QWebPage.

+0

Oba łącza wygasły – Grief

4

Wygląda na to, że "wkhtmltopdf" ("wkhtmltopdf") ma odpowiednią implementację - wyszukaj słowo "painter" w src/lib/imageconverter.cc.