目前,我将我的HTML,JS,CSS,图形等本地存储在硬盘上,并使用QWebFrame::SetUrl( QUrl::fromLocalFile( "appFolder\html\index.html" ))
访问它们。在某些时候,我将需要加密本地存储的文件,所以我正在寻找一种方法来解密它们,或者将它们全部解密到内存中并以这种方式访问它们。
我知道我可以使用QWebFrame::setContent( htmlData )
从内存中加载HTML,这样我就可以加载加密的HTML文件,在内存中解密,然后以这种方式显示,但是我如何处理其他数据(JS) ,CSS,图形等)当前存储在子文件夹中?
或者,有没有办法可以拦截访问所有HTML,JS,CSS等文件的请求,并在加载时对其进行解密?
通过使用我自己的NetworkAccessManager
,我可以拦截对createRequest
的调用,这样我就可以看到每个文件的加载时间,但我看不到如何使用它来动态解密数据。我还可以将插槽函数连接到finished(QNetworkReply*)
信号,但此时数据已经被读取 - QIODevice
的当前位置指向文件的末尾。
我非常感谢任何有关正确方向的建议或指示。
答案 0 :(得分:2)
我认为在你的情况下,最好的解决方案是继承 QNetworkReply 类,并在重新实现的QNetworkAccessManager::createRequest()
函数中使用这个新类。
通常,您应该重新实现 QNetworkReply 的下一个虚拟功能:
bytesAvailable()
,readData(char *data, qint64 maxSize)
,close()
,abort()
。
例如,readData
应该如下:
qint64 NetworkReplyEx::readData(char *data, qint64 maxSize)
{
return m_buffer.read(data, maxSize);
}
其中m_buffer
已经是解密数据。
此外,您需要在此类中添加所有必需的逻辑以获取加密数据,解密此数据...
最后,您应该在新类中手动发出finished()
信号,因此QWebView
或其他相关类将获得解密的html。