7

我正在使用 Qt(带有 Qt 创建器的精美浏览器示例)使用此代码(从此处获取并转换)创建网页的屏幕截图:

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");

但它只创建页面可见部分(视口)的屏幕截图。

如果我在开头添加这一行,屏幕截图是从整个页面创建的,但问题是,每次加载页面时都会添加一个新的滚动条。

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

知道如何解决这个问题吗?

4

2 回答 2

11

您只需要禁用滚动条:

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

对于一个完整的例子,使用我在 3.5 年前在捕获网页博客文章中描述的内容。此后的代码存储库已移至http://qt.gitorious.org/qt-labs/graphics-dojo

如果您注意上面的示例,则无需创建 QWebView。您完全只能从 QWebPage 实例中工作。

于 2012-07-13T04:57:08.343 回答
4

看起来“wkhtmltopdf”(“wkhtmltopdf”)对此有正确的实现 - 在 src/lib/imageconverter.cc 中搜索“painter”。

于 2012-07-10T09:44:33.520 回答