<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- qnetworkdiskcache.cpp --> <title>QNetworkDiskCache Class | Qt Network 5.12.2</title> <link rel="stylesheet" type="text/css" href="style/offline-simple.css" /> <script type="text/javascript"> document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css"); // loading style sheet breaks anchors that were jumped to before // so force jumping to anchor again setTimeout(function() { var anchor = location.hash; // need to jump to different anchor first (e.g. none) location.hash = "#"; setTimeout(function() { location.hash = anchor; }, 0); }, 0); </script> </head> <body> <div class="header" id="qtdocheader"> <div class="main"> <div class="main-rounded"> <div class="navigationbar"> <table><tr> <td >Qt 5.12</td><td ><a href="qtnetwork-index.html">Qt Network</a></td><td ><a href="qtnetwork-module.html">C++ Classes</a></td><td >QNetworkDiskCache</td></tr></table><table class="buildversion"><tr> <td id="buildversion" width="100%" align="right"><a href="qtnetwork-index.html">Qt 5.12.2 Reference Documentation</a></td> </tr></table> </div> </div> <div class="content"> <div class="line"> <div class="content mainContent"> <div class="sidebar"> <div class="toc"> <h3><a name="toc">Contents</a></h3> <ul> <li class="level1"><a href="#public-functions">Public Functions</a></li> <li class="level1"><a href="#reimplemented-public-functions">Reimplemented Public Functions</a></li> <li class="level1"><a href="#public-slots">Public Slots</a></li> <li class="level1"><a href="#static-public-members">Static Public Members</a></li> <li class="level1"><a href="#protected-functions">Protected Functions</a></li> <li class="level1"><a href="#details">Detailed Description</a></li> </ul> </div> <div class="sidebar-content" id="sidebar-content"></div></div> <h1 class="title">QNetworkDiskCache Class</h1> <!-- $$$QNetworkDiskCache-brief --> <p>The <a href="qnetworkdiskcache.html">QNetworkDiskCache</a> class provides a very basic disk cache. <a href="#details">More...</a></p> <!-- @@@QNetworkDiskCache --> <div class="table"><table class="alignedsummary"> <tr><td class="memItemLeft rightAlign topAlign"> Header:</td><td class="memItemRight bottomAlign"> <span class="preprocessor">#include <QNetworkDiskCache></span> </td></tr><tr><td class="memItemLeft rightAlign topAlign"> qmake:</td><td class="memItemRight bottomAlign"> QT += network</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Since:</td><td class="memItemRight bottomAlign"> Qt 4.5</td></tr><tr><td class="memItemLeft rightAlign topAlign"> Inherits:</td><td class="memItemRight bottomAlign"> <a href="qabstractnetworkcache.html">QAbstractNetworkCache</a></td></tr></table></div><ul> <li><a href="qnetworkdiskcache-members.html">List of all members, including inherited members</a></li> <li><a href="qnetworkdiskcache-obsolete.html">Obsolete members</a></li> </ul> <a name="public-functions"></a> <h2 id="public-functions">Public Functions</h2> <div class="table"><table class="alignedsummary"> <tr><td class="memItemLeft rightAlign topAlign"> </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#QNetworkDiskCache">QNetworkDiskCache</a></b>(QObject *<i>parent</i> = nullptr)</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> virtual </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#dtor.QNetworkDiskCache">~QNetworkDiskCache</a></b>()</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> QString </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#cacheDirectory">cacheDirectory</a></b>() const</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> QNetworkCacheMetaData </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#fileMetaData">fileMetaData</a></b>(const QString &<i>fileName</i>) const</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> qint64 </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#maximumCacheSize">maximumCacheSize</a></b>() const</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#setCacheDirectory">setCacheDirectory</a></b>(const QString &<i>cacheDir</i>)</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> void </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#setMaximumCacheSize">setMaximumCacheSize</a></b>(qint64 <i>size</i>)</td></tr> </table></div> <a name="reimplemented-public-functions"></a> <h2 id="reimplemented-public-functions">Reimplemented Public Functions</h2> <div class="table"><table class="alignedsummary"> <tr><td class="memItemLeft rightAlign topAlign"> virtual qint64 </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#cacheSize">cacheSize</a></b>() const override</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> virtual QIODevice *</td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#data">data</a></b>(const QUrl &<i>url</i>) override</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#insert">insert</a></b>(QIODevice *<i>device</i>) override</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> virtual QNetworkCacheMetaData </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#metaData">metaData</a></b>(const QUrl &<i>url</i>) override</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> virtual QIODevice *</td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#prepare">prepare</a></b>(const QNetworkCacheMetaData &<i>metaData</i>) override</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> virtual bool </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#remove">remove</a></b>(const QUrl &<i>url</i>) override</td></tr> <tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#updateMetaData">updateMetaData</a></b>(const QNetworkCacheMetaData &<i>metaData</i>) override</td></tr> </table></div> <ul> <li class="fn">7 public functions inherited from <a href="qabstractnetworkcache.html#public-functions">QAbstractNetworkCache</a></li> <li class="fn">31 public functions inherited from <a href="../qtcore/qobject.html#public-functions">QObject</a></li> </ul> <a name="public-slots"></a> <h2 id="public-slots">Public Slots</h2> <div class="table"><table class="alignedsummary"> <tr><td class="memItemLeft rightAlign topAlign"> virtual void </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#clear">clear</a></b>() override</td></tr> </table></div> <ul> <li class="fn">1 public slot inherited from <a href="qabstractnetworkcache.html#public-slots">QAbstractNetworkCache</a></li> <li class="fn">1 public slot inherited from <a href="../qtcore/qobject.html#public-slots">QObject</a></li> </ul> <a name="static-public-members"></a> <h2 id="static-public-members">Static Public Members</h2> <div class="table"><table class="alignedsummary"> <tr><td class="memItemLeft rightAlign topAlign"> const QMetaObject </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#staticMetaObject-var">staticMetaObject</a></b></td></tr> </table></div> <ul> <li class="fn">9 static public members inherited from <a href="../qtcore/qobject.html#static-public-members">QObject</a></li> </ul> <a name="protected-functions"></a> <h2 id="protected-functions">Protected Functions</h2> <div class="table"><table class="alignedsummary"> <tr><td class="memItemLeft rightAlign topAlign"> virtual qint64 </td><td class="memItemRight bottomAlign"><b><a href="qnetworkdiskcache.html#expire">expire</a></b>()</td></tr> </table></div> <ul> <li class="fn">9 protected functions inherited from <a href="../qtcore/qobject.html#protected-functions">QObject</a></li> </ul> <h3>Additional Inherited Members</h3> <ul> <li class="fn">1 property inherited from <a href="../qtcore/qobject.html#properties">QObject</a></li> <li class="fn">2 signals inherited from <a href="../qtcore/qobject.html#signals">QObject</a></li> </ul> <a name="details"></a> <!-- $$$QNetworkDiskCache-description --> <div class="descr"> <h2 id="details">Detailed Description</h2> <p>The <a href="qnetworkdiskcache.html">QNetworkDiskCache</a> class provides a very basic disk cache.</p> <p><a href="qnetworkdiskcache.html">QNetworkDiskCache</a> stores each url in its own file inside of the <a href="qnetworkdiskcache.html#cacheDirectory">cacheDirectory</a> using <a href="../qtcore/qdatastream.html">QDataStream</a>. Files with a text MimeType are compressed using <a href="../qtcore/qbytearray.html#qCompress">qCompress</a>. Data is written to disk only in <a href="qnetworkdiskcache.html#insert">insert</a>() and <a href="qnetworkdiskcache.html#updateMetaData">updateMetaData</a>().</p> <p>Currently you cannot share the same cache files with more than one disk cache.</p> <p><a href="qnetworkdiskcache.html">QNetworkDiskCache</a> by default limits the amount of space that the cache will use on the system to 50MB.</p> <p>Note you have to set the cache directory before it will work.</p> <p>A network disk cache can be enabled by:</p> <pre class="cpp"> <span class="type"><a href="qnetworkaccessmanager.html">QNetworkAccessManager</a></span> <span class="operator">*</span>manager <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qnetworkaccessmanager.html">QNetworkAccessManager</a></span>(<span class="keyword">this</span>); <span class="type"><a href="qnetworkdiskcache.html#QNetworkDiskCache">QNetworkDiskCache</a></span> <span class="operator">*</span>diskCache <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qnetworkdiskcache.html#QNetworkDiskCache">QNetworkDiskCache</a></span>(<span class="keyword">this</span>); diskCache<span class="operator">-</span><span class="operator">></span>setCacheDirectory(<span class="string">"cacheDir"</span>); manager<span class="operator">-</span><span class="operator">></span>setCache(diskCache); </pre> <p>When sending requests, to control the preference of when to use the cache and when to use the network, consider the following:</p> <pre class="cpp"> <span class="comment">// do a normal request (preferred from network, as this is the default)</span> <span class="type"><a href="qnetworkrequest.html">QNetworkRequest</a></span> request(<span class="type"><a href="../qtcore/qurl.html">QUrl</a></span>(<span class="type"><a href="../qtcore/qstring.html">QString</a></span>(<span class="string">"http://qt-project.org"</span>))); manager<span class="operator">-</span><span class="operator">></span>get(request); <span class="comment">// do a request preferred from cache</span> <span class="type"><a href="qnetworkrequest.html">QNetworkRequest</a></span> request2(<span class="type"><a href="../qtcore/qurl.html">QUrl</a></span>(<span class="type"><a href="../qtcore/qstring.html">QString</a></span>(<span class="string">"http://qt-project.org"</span>))); request2<span class="operator">.</span>setAttribute(<span class="type"><a href="qnetworkrequest.html">QNetworkRequest</a></span><span class="operator">::</span>CacheLoadControlAttribute<span class="operator">,</span> <span class="type"><a href="qnetworkrequest.html">QNetworkRequest</a></span><span class="operator">::</span>PreferCache); manager<span class="operator">-</span><span class="operator">></span>get(request2); </pre> <p>To check whether the response came from the cache or from the network, the following can be applied:</p> <pre class="cpp"> <span class="type">void</span> replyFinished(<span class="type"><a href="qnetworkreply.html">QNetworkReply</a></span> <span class="operator">*</span>reply) { <span class="type"><a href="../qtcore/qvariant.html">QVariant</a></span> fromCache <span class="operator">=</span> reply<span class="operator">-</span><span class="operator">></span>attribute(<span class="type"><a href="qnetworkrequest.html">QNetworkRequest</a></span><span class="operator">::</span>SourceIsFromCacheAttribute); <a href="../qtcore/qtglobal.html#qDebug">qDebug</a>() <span class="operator"><</span><span class="operator"><</span> <span class="string">"page from cache?"</span> <span class="operator"><</span><span class="operator"><</span> fromCache<span class="operator">.</span>toBool(); } </pre> </div> <!-- @@@QNetworkDiskCache --> <div class="func"> <h2>Member Function Documentation</h2> <!-- $$$QNetworkDiskCache[overload1]$$$QNetworkDiskCacheQObject* --> <h3 class="fn" id="QNetworkDiskCache"><a name="QNetworkDiskCache"></a>QNetworkDiskCache::<span class="name">QNetworkDiskCache</span>(<span class="type"><a href="../qtcore/qobject.html#QObject">QObject</a></span> *<i>parent</i> = nullptr)</h3> <p>Creates a new disk cache. The <i>parent</i> argument is passed to <a href="qabstractnetworkcache.html">QAbstractNetworkCache</a>'s constructor.</p> <!-- @@@QNetworkDiskCache --> <!-- $$$~QNetworkDiskCache[overload1]$$$~QNetworkDiskCache --> <h3 class="fn" id="dtor.QNetworkDiskCache"><a name="dtor.QNetworkDiskCache"></a><code>[virtual] </code>QNetworkDiskCache::<span class="name">~QNetworkDiskCache</span>()</h3> <p>Destroys the cache object. This does not clear the disk cache.</p> <!-- @@@~QNetworkDiskCache --> <!-- $$$cacheDirectory[overload1]$$$cacheDirectory --> <h3 class="fn" id="cacheDirectory"><a name="cacheDirectory"></a><span class="type"><a href="../qtcore/qstring.html">QString</a></span> QNetworkDiskCache::<span class="name">cacheDirectory</span>() const</h3> <p>Returns the location where cached files will be stored.</p> <p><b>See also </b><a href="qnetworkdiskcache.html#setCacheDirectory">setCacheDirectory</a>().</p> <!-- @@@cacheDirectory --> <!-- $$$cacheSize[overload1]$$$cacheSize --> <h3 class="fn" id="cacheSize"><a name="cacheSize"></a><code>[override virtual] </code><span class="type"><a href="../qtcore/qtglobal.html#qint64-typedef">qint64</a></span> QNetworkDiskCache::<span class="name">cacheSize</span>() const</h3> <p>Reimplemented from <a href="qabstractnetworkcache.html#cacheSize">QAbstractNetworkCache::cacheSize</a>().</p> <!-- @@@cacheSize --> <!-- $$$clear[overload1]$$$clear --> <h3 class="fn" id="clear"><a name="clear"></a><code>[override virtual slot] </code><span class="type">void</span> QNetworkDiskCache::<span class="name">clear</span>()</h3> <p>Reimplemented from <a href="qabstractnetworkcache.html#clear">QAbstractNetworkCache::clear</a>().</p> <!-- @@@clear --> <!-- $$$data[overload1]$$$dataconstQUrl& --> <h3 class="fn" id="data"><a name="data"></a><code>[override virtual] </code><span class="type"><a href="../qtcore/qiodevice.html">QIODevice</a></span> *QNetworkDiskCache::<span class="name">data</span>(const <span class="type"><a href="../qtcore/qurl.html">QUrl</a></span> &<i>url</i>)</h3> <p>Reimplemented from <a href="qabstractnetworkcache.html#data">QAbstractNetworkCache::data</a>().</p> <!-- @@@data --> <!-- $$$expire[overload1]$$$expire --> <h3 class="fn" id="expire"><a name="expire"></a><code>[virtual protected] </code><span class="type"><a href="../qtcore/qtglobal.html#qint64-typedef">qint64</a></span> QNetworkDiskCache::<span class="name">expire</span>()</h3> <p>Cleans the cache so that its size is under the maximum cache size. Returns the current size of the cache.</p> <p>When the current size of the cache is greater than the <a href="qnetworkdiskcache.html#maximumCacheSize">maximumCacheSize</a>() older cache files are removed until the total size is less then 90% of <a href="qnetworkdiskcache.html#maximumCacheSize">maximumCacheSize</a>() starting with the oldest ones first using the file creation date to determine how old a cache file is.</p> <p>Subclasses can reimplement this function to change the order that cache files are removed taking into account information in the application knows about that <a href="qnetworkdiskcache.html">QNetworkDiskCache</a> does not, for example the number of times a cache is accessed.</p> <p><b>Note: </b><a href="qnetworkdiskcache.html#cacheSize">cacheSize</a>() calls expire if the current cache size is unknown.</p><p><b>See also </b><a href="qnetworkdiskcache.html#maximumCacheSize">maximumCacheSize</a>() and <a href="qnetworkdiskcache.html#fileMetaData">fileMetaData</a>().</p> <!-- @@@expire --> <!-- $$$fileMetaData[overload1]$$$fileMetaDataconstQString& --> <h3 class="fn" id="fileMetaData"><a name="fileMetaData"></a><span class="type"><a href="qnetworkcachemetadata.html">QNetworkCacheMetaData</a></span> QNetworkDiskCache::<span class="name">fileMetaData</span>(const <span class="type"><a href="../qtcore/qstring.html">QString</a></span> &<i>fileName</i>) const</h3> <p>Returns the <a href="qnetworkcachemetadata.html">QNetworkCacheMetaData</a> for the cache file <i>fileName</i>.</p> <p>If <i>fileName</i> is not a cache file <a href="qnetworkcachemetadata.html">QNetworkCacheMetaData</a> will be invalid.</p> <!-- @@@fileMetaData --> <!-- $$$insert[overload1]$$$insertQIODevice* --> <h3 class="fn" id="insert"><a name="insert"></a><code>[override virtual] </code><span class="type">void</span> QNetworkDiskCache::<span class="name">insert</span>(<span class="type"><a href="../qtcore/qiodevice.html">QIODevice</a></span> *<i>device</i>)</h3> <p>Reimplemented from <a href="qabstractnetworkcache.html#insert">QAbstractNetworkCache::insert</a>().</p> <!-- @@@insert --> <!-- $$$maximumCacheSize[overload1]$$$maximumCacheSize --> <h3 class="fn" id="maximumCacheSize"><a name="maximumCacheSize"></a><span class="type"><a href="../qtcore/qtglobal.html#qint64-typedef">qint64</a></span> QNetworkDiskCache::<span class="name">maximumCacheSize</span>() const</h3> <p>Returns the current maximum size for the disk cache.</p> <p><b>See also </b><a href="qnetworkdiskcache.html#setMaximumCacheSize">setMaximumCacheSize</a>().</p> <!-- @@@maximumCacheSize --> <!-- $$$metaData[overload1]$$$metaDataconstQUrl& --> <h3 class="fn" id="metaData"><a name="metaData"></a><code>[override virtual] </code><span class="type"><a href="qnetworkcachemetadata.html">QNetworkCacheMetaData</a></span> QNetworkDiskCache::<span class="name">metaData</span>(const <span class="type"><a href="../qtcore/qurl.html">QUrl</a></span> &<i>url</i>)</h3> <p>Reimplemented from <a href="qabstractnetworkcache.html#metaData">QAbstractNetworkCache::metaData</a>().</p> <!-- @@@metaData --> <!-- $$$prepare[overload1]$$$prepareconstQNetworkCacheMetaData& --> <h3 class="fn" id="prepare"><a name="prepare"></a><code>[override virtual] </code><span class="type"><a href="../qtcore/qiodevice.html">QIODevice</a></span> *QNetworkDiskCache::<span class="name">prepare</span>(const <span class="type"><a href="qnetworkcachemetadata.html">QNetworkCacheMetaData</a></span> &<i>metaData</i>)</h3> <p>Reimplemented from <a href="qabstractnetworkcache.html#prepare">QAbstractNetworkCache::prepare</a>().</p> <!-- @@@prepare --> <!-- $$$remove[overload1]$$$removeconstQUrl& --> <h3 class="fn" id="remove"><a name="remove"></a><code>[override virtual] </code><span class="type">bool</span> QNetworkDiskCache::<span class="name">remove</span>(const <span class="type"><a href="../qtcore/qurl.html">QUrl</a></span> &<i>url</i>)</h3> <p>Reimplemented from <a href="qabstractnetworkcache.html#remove">QAbstractNetworkCache::remove</a>().</p> <!-- @@@remove --> <!-- $$$setCacheDirectory[overload1]$$$setCacheDirectoryconstQString& --> <h3 class="fn" id="setCacheDirectory"><a name="setCacheDirectory"></a><span class="type">void</span> QNetworkDiskCache::<span class="name">setCacheDirectory</span>(const <span class="type"><a href="../qtcore/qstring.html">QString</a></span> &<i>cacheDir</i>)</h3> <p>Sets the directory where cached files will be stored to <i>cacheDir</i></p> <p><a href="qnetworkdiskcache.html">QNetworkDiskCache</a> will create this directory if it does not exists.</p> <p>Prepared cache items will be stored in the new cache directory when they are inserted.</p> <p><b>See also </b><a href="qnetworkdiskcache.html#cacheDirectory">cacheDirectory</a>() and <a href="../qtgui/qdesktopservices-obsolete.html#StandardLocation-enum">QDesktopServices::CacheLocation</a>.</p> <!-- @@@setCacheDirectory --> <!-- $$$setMaximumCacheSize[overload1]$$$setMaximumCacheSizeqint64 --> <h3 class="fn" id="setMaximumCacheSize"><a name="setMaximumCacheSize"></a><span class="type">void</span> QNetworkDiskCache::<span class="name">setMaximumCacheSize</span>(<span class="type"><a href="../qtcore/qtglobal.html#qint64-typedef">qint64</a></span> <i>size</i>)</h3> <p>Sets the maximum size of the disk cache to be <i>size</i>.</p> <p>If the new size is smaller then the current cache size then the cache will call <a href="qnetworkdiskcache.html#expire">expire</a>().</p> <p><b>See also </b><a href="qnetworkdiskcache.html#maximumCacheSize">maximumCacheSize</a>().</p> <!-- @@@setMaximumCacheSize --> <!-- $$$updateMetaData[overload1]$$$updateMetaDataconstQNetworkCacheMetaData& --> <h3 class="fn" id="updateMetaData"><a name="updateMetaData"></a><code>[override virtual] </code><span class="type">void</span> QNetworkDiskCache::<span class="name">updateMetaData</span>(const <span class="type"><a href="qnetworkcachemetadata.html">QNetworkCacheMetaData</a></span> &<i>metaData</i>)</h3> <p>Reimplemented from <a href="qabstractnetworkcache.html#updateMetaData">QAbstractNetworkCache::updateMetaData</a>().</p> <!-- @@@updateMetaData --> </div> </div> </div> </div> </div> </div> <div class="footer"> <p> <acronym title="Copyright">©</acronym> 2019 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners.<br/> The documentation provided herein is licensed under the terms of the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License version 1.3</a> as published by the Free Software Foundation.<br/> Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. </p> </div> </body> </html>