一、QWebEngineView获取Cookie及缓存文件的默认存储路径
通过QWebEngineView实现基本的浏览网页界面程序,运行后QtWebEngine会在用户目录AppData\Local下生成缓存文件夹,该文件夹是隐藏的,需要设置文件夹隐藏可见才能具体看到。示例如下:
C:\Users\Administrator\AppData\Local\AppName\QtWebEngine\Default
其中,AppName是应用程序的名称,文件夹中包含了缓存文件,同时也包含了cookies信息,cookies保存在QtWebEngine\Default文件夹中。
二、QWebEngineView删除Cookie及缓存文件
//删除缓存Cookie
void WebViewHelper::clearCookie()
{
QWebEngineProfile * engineProfile = _webView->page()->profile();
engineProfile->clearHttpCache(); // 清理缓存
engineProfile->clearAllVisitedLinks(); // 清理浏览记录
QWebEngineCookieStore* pCookie = _webView->page()->profile()->cookieStore();
pCookie->deleteAllCookies(); // 清理cookie
pCookie->deleteSessionCookies(); // 清理会话cookie
//this->deleteDir(engineProfile->persistentStoragePath());//删除会话和持久性Cookie文件夹
}
//删除文件夹
bool WebViewHelper::deleteDir(const QString &path)
{
if (path.isEmpty()){
return false;
}
QDir dir(path);
if(!dir.exists()){
return true;
}
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
foreach (QFileInfo file, fileList){ //遍历文件信息
if (file.isFile()){ // 是文件,删除
file.dir().remove(file.fileName());
}else{ // 递归删除
deleteDir(file.absoluteFilePath());
}
}
return dir.rmpath(dir.absolutePath()); // 删除文件夹
}
如果不想使用存储Cookie和缓存到本地文件,可以指定:
engineProfile->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);//会话和持久性cookie都存储在内存中
engineProfile->setHttpCacheType(QWebEngineProfile::NoCache);//禁用内存和磁盘缓存。
三、QWebEngineView修改Cookie及缓存文件的存储路径
有关访问链接的信息与持久性cookie和其他持久性数据一起存储在由storageName()返回的存储中。持久性数据存储在通过调用setPersistentStoragePath()设置的子目录中,而高速缓存位于通过调用setCachePath()设置的子目录中。可以通过调用setHttpCacheType()将缓存类型设置为内存中或磁盘上。如果仅设置了存储名称,则会自动创建并命名子目录。如果您手动设置任何值,则应在创建属于配置文件的任何页面之前进行设置。
//指定缓存Cookie的路径
void WebViewHelper::setCachePath(const QString &path)
{
if(!path.isEmpty())
{
QWebEngineProfile * engineProfile = _webView->page()->profile();
engineProfile->setCachePath(path);//指定高速缓存路径
engineProfile->setPersistentStoragePath(path);//指定会话和持久性Cookie路径
engineProfile->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);//会话和持久性Cookie均保存到磁盘或从磁盘还原
engineProfile->setHttpCacheType(QWebEngineProfile::DiskHttpCache);//使用磁盘缓存。
}
}
以上代码中_webView是QWebEngineView的对象。
QWebEngineView *_webView;