QNetworkDiskCache Class

The QNetworkDiskCache class provides a very basic disk cache. 更多...

头文件: #include <QNetworkDiskCache>
qmake: QT += network
开始支持版本: Qt 4.5
基类: QAbstractNetworkCache

公有函数

QNetworkDiskCache(QObject *parent = Q_NULLPTR)
~QNetworkDiskCache()
QString cacheDirectory() const
QNetworkCacheMetaData fileMetaData(const QString &fileName) const
qint64 maximumCacheSize() const
void setCacheDirectory(const QString &cacheDir)
void setMaximumCacheSize(qint64 size)

重新实现的公有函数

virtual qint64 cacheSize() const
virtual QIODevice *data(const QUrl &url)
virtual void insert(QIODevice *device)
virtual QNetworkCacheMetaData metaData(const QUrl &url)
virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData)
virtual bool remove(const QUrl &url)
virtual void updateMetaData(const QNetworkCacheMetaData &metaData)

公有槽函数

virtual void clear()

受保护的函数

virtual qint64 expire()
  • 9 个受保护的函数继承自 QObject

其他继承的成员

  • 1 个属性继承自 QObject
  • 2 个信号继承自 QObject
  • 1 个公有变量继承自 QObject
  • 10 个静态公有成员继承自 QObject
  • 2 个受保护的变量继承自 QObject

详细描述

The QNetworkDiskCache class provides a very basic disk cache.

QNetworkDiskCache stores each url in its own file inside of the cacheDirectory using QDataStream. Files with a text MimeType are compressed using qCompress. Data is written to disk only in insert() and updateMetaData().

Currently you cannot share the same cache files with more than one disk cache.

QNetworkDiskCache by default limits the amount of space that the cache will use on the system to 50MB.

Note you have to set the cache directory before it will work.

A network disk cache can be enabled by:


  QNetworkAccessManager *manager = new QNetworkAccessManager(this);
  QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
  diskCache->setCacheDirectory("cacheDir");
  manager->setCache(diskCache);

When sending requests, to control the preference of when to use the cache and when to use the network, consider the following:


  // do a normal request (preferred from network, as this is the default)
  QNetworkRequest request(QUrl(QString("http://qt-project.org")));
  manager->get(request);

  // do a request preferred from cache
  QNetworkRequest request2(QUrl(QString("http://qt-project.org")));
  request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
  manager->get(request2);

To check whether the response came from the cache or from the network, the following can be applied:


  void replyFinished(QNetworkReply *reply) {
      QVariant fromCache = reply->attribute(QNetworkRequest::SourceIsFromCacheAttribute);
      qDebug() << "page from cache?" << fromCache.toBool();
  }

成员函数

QNetworkDiskCache::QNetworkDiskCache(QObject *parent = Q_NULLPTR)

Creates a new disk cache. The parent argument is passed to QAbstractNetworkCache's constructor.

QNetworkDiskCache::~QNetworkDiskCache()

Destroys the cache object. This does not clear the disk cache.

QString QNetworkDiskCache::cacheDirectory() const

Returns the location where cached files will be stored.

参见 setCacheDirectory().

[virtual] qint64 QNetworkDiskCache::cacheSize() const

Reimplemented from QAbstractNetworkCache::cacheSize().

[virtual slot] void QNetworkDiskCache::clear()

Reimplemented from QAbstractNetworkCache::clear().

[virtual] QIODevice *QNetworkDiskCache::data(const QUrl &url)

Reimplemented from QAbstractNetworkCache::data().

[virtual protected] qint64 QNetworkDiskCache::expire()

Cleans the cache so that its size is under the maximum cache size. Returns the current size of the cache.

When the current size of the cache is greater than the maximumCacheSize() older cache files are removed until the total size is less then 90% of maximumCacheSize() starting with the oldest ones first using the file creation date to determine how old a cache file is.

Subclasses can reimplement this function to change the order that cache files are removed taking into account information in the application knows about that QNetworkDiskCache does not, for example the number of times a cache is accessed.

Note: cacheSize() calls expire if the current cache size is unknown.

参见 maximumCacheSize() and fileMetaData().

QNetworkCacheMetaData QNetworkDiskCache::fileMetaData(const QString &fileName) const

Returns the QNetworkCacheMetaData for the cache file fileName.

If fileName is not a cache file QNetworkCacheMetaData will be invalid.

[virtual] void QNetworkDiskCache::insert(QIODevice *device)

Reimplemented from QAbstractNetworkCache::insert().

qint64 QNetworkDiskCache::maximumCacheSize() const

Returns the current maximum size for the disk cache.

参见 setMaximumCacheSize().

[virtual] QNetworkCacheMetaData QNetworkDiskCache::metaData(const QUrl &url)

Reimplemented from QAbstractNetworkCache::metaData().

[virtual] QIODevice *QNetworkDiskCache::prepare(const QNetworkCacheMetaData &metaData)

Reimplemented from QAbstractNetworkCache::prepare().

[virtual] bool QNetworkDiskCache::remove(const QUrl &url)

Reimplemented from QAbstractNetworkCache::remove().

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

Sets the directory where cached files will be stored to cacheDir

QNetworkDiskCache will create this directory if it does not exists.

Prepared cache items will be stored in the new cache directory when they are inserted.

参见 cacheDirectory() and QDesktopServices::CacheLocation.

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

Sets the maximum size of the disk cache to be size.

If the new size is smaller then the current cache size then the cache will call expire().

参见 maximumCacheSize().

[virtual] void QNetworkDiskCache::updateMetaData(const QNetworkCacheMetaData &metaData)

Reimplemented from QAbstractNetworkCache::updateMetaData().