目录
官方解析
QWebPage提供一个视图对象和一个web页面;
QWebPage提供了web页面的内容,各种设置(是否支持JavaScript等)和连接,它与QWebFrame一起使用就和QWebView一样了。
QWebPage与QWebView十分的相似;
在无界面的环境中使用QWebPage
通过QwebPage中的setViewportSize()设置视口。然后调用显示函数QWebFrame::render().
如下的Thumbnail类:
class Thumbnailer : public QObject
{
Q_OBJECT
public:
Thumbnailer(const QUrl &url);
Q_SIGNALS:
void finished();
private Q_SLOTS:
void render();
private:
QWebPage page;
};
Thumbnail的构造函数:
Thumbnailer::Thumbnailer(const QUrl &url)
{
page.mainFrame()->load(url);
connect(&page, SIGNAL(loadFinished(bool)),
this, SLOT(render()));
}
render()函数的作用是使用QWebPage对象画一个缩略图:
void Thumbnailer::render()
{
page.setViewportSize(page.mainFrame()->contentsSize());
QImage image(page.viewportSize(), QImage::Format_ARGB32);
QPainter painter(&image);
page.mainFrame()->render(&painter);
painter.end();
QImage thumbnail = image.scaled(400, 400);
thumbnail.save("thumbnail.png");
emit finished();
}
首先设置viewportSize的大小,然后实例化一个QImage对象。这个Image的大小和viewportSize的大小一样。把image作为参数传给painter;将主框架及其子框架的内容呈现到painter中。最后,保存缩放后的图像。
博主例子
这里把官方的例子跑起来:
程序运行截图如下:
Qt Creator运行截图如下:
程序结构如下:
源码如下:
QWebPage.pro
QT += core gui webkitwidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QWebPage
TEMPLATE = app
SOURCES += main.cpp\
thumbnailer.cpp
HEADERS += thumbnailer.h
thumbnailer.h
#ifndef THUMBNAILER_H
#define THUMBNAILER_H
#include <QObject>
#include <QWebPage>
#include <QUrl>
class Thumbnailer : public QObject
{
Q_OBJECT
public:
Thumbnailer(const QUrl &url);
~Thumbnailer();
Q_SIGNALS:
void finished();
private Q_SLOTS:
void render();
private:
QWebPage page;
};
#endif // THUMBNAILER_H
main.cpp
#include "thumbnailer.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Thumbnailer w(QUrl("http://www.baidu.com"));
Q_UNUSED(w)
return a.exec();
}
thumbnailer.cpp
#include "thumbnailer.h"
#include <QWebFrame>
#include <QImage>
#include <QPainter>
Thumbnailer::Thumbnailer(const QUrl &url)
{
page.mainFrame()->load(url);
connect(&page, SIGNAL(loadFinished(bool)), this, SLOT(render()));
}
Thumbnailer::~Thumbnailer()
{
}
void Thumbnailer::render()
{
page.setViewportSize(page.mainFrame()->contentsSize());
QImage image(page.viewportSize(), QImage::Format_ARGB32);
QPainter painter(&image);
page.mainFrame()->render(&painter);
painter.end();
QImage thumbnail = image.scaled(400, 400);
thumbnail.save("thumbnail.png");
image.save("original.png");
emit finished();
}