在第二篇我们实现一个非常简单的例子。使用Qt WebKit显示网页。
注: 这个demo网上有很多,包括nokia Qt 的doc 和example 官方文档里也有相关例子。但是有不全面的地方,在编译运行时甚至会显示不出网页,这是因为几个小地方没有注意到,可能有的博主自己并没有实际去编译。鉴于这个demo很简单,就全部源代码贴上。
1. 新建main.cpp
#include <QtGui>
#include <QtWebKit>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置网络代理:使用系统代理
QNetworkProxyFactory::setUseSystemConfiguration(true);
//显示网页
QWebView view;
view.load(QUrl(http://qt.nokia.com));
view.show();
return a.exec();
}
2. 新建 web.pro 文件
显示网页只需要区区这几行源代码即可,但是在.pro文件中,需要做如下更改
QT += webkit\network //此处不仅需要webkit模块,还需要network模块。因为Webkit依赖于network
HEADERS =
SOURCES = main.cpp
RESOURCES =
3. 编译运行
$ qmake -project
$ qmake
$ make
$ ./web
运行结果如下:
要提高响应时间,我们可以增加缓存系统。QDesktopServices::storageLocation 中的 CacheLocation 枚举函数可处理在跨平台情况下,指定存储位置的情况。使用QabstractNetworkCache 接口,可以自己实现并使用定制的缓存系统。
以下四行代码就可增加本地缓存来提高响应时间:
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
QString location =QDesktopServices::storageLocation(QDesktopServices::CacheLocation);
diskCache->setCacheDirectory(location);
networkAccessManager->setCache(diskCache);
部分网站提供的不仅有内容,还有多种服务。网络服务的内容从货币汇率信息到企业应用程序接入外部网络的连接,多种多样。借助 Qt WebKit 集成,可在应用程序中使用这些网络服务。例如Twitter认证请求的代码:
QNetworkRequest request(“http://twitter.com”);
req.setRawHeader("Authorization", basicBase64);
QNetworkReply *reply = manager->get(request);
Qt webkit中如何显示网页和使用网络服务介绍到此。