2012-01-31 28 views
7

Tôi đang sử dụng Qt (ví dụ trình duyệt ưa thích với tác giả Qt) để tạo ra một ảnh chụp màn hình của trang web sử dụng mã này (lấy và chuyển đổi từ here):Tạo toàn bộ ảnh chụp màn hình trang sử dụng 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"); 

Nhưng nó chỉ tạo ra một ảnh chụp màn hình của phần hiển thị của trang (cổng xem).

Nếu tôi thêm dòng này ở đầu, ảnh chụp màn hình được tạo từ toàn bộ trang, nhưng vấn đề là, nó sẽ thêm thanh cuộn mới mỗi lần tải trang.

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

Bất kỳ ý tưởng nào để khắc phục sự cố này?

Trả lời

11

Bạn chỉ cần vô hiệu hóa các thanh cuộn:

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

Đối với một ví dụ hoàn chỉnh, sử dụng những gì tôi đã mô tả 3,5 năm trước đây tại Capturing web pages bài đăng blog. Kho lưu trữ mã cho nó đã được chuyển từ http://qt.gitorious.org/qt-labs/graphics-dojo.

Nếu bạn chú ý đến ví dụ trên, không cần phải tạo QWebView. Bạn hoàn toàn có thể làm việc chỉ từ cá thể QWebPage.

+0

Cả hai liên kết đều hết hạn – Grief

4

Có vẻ như "wkhtmltopdf" ("wkhtmltopdf") có triển khai chính xác cho việc này - tìm kiếm "họa sĩ" trong src/lib/imageconverter.cc.

Các vấn đề liên quan