QNetworkDiskCache Class

QNetworkDiskCache クラスは、非常に基本的なディスク・キャッシュを提供します。詳細...

Header: #include <QNetworkDiskCache>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network
Inherits: QAbstractNetworkCache

パブリック関数

QNetworkDiskCache(QObject *parent = nullptr)
virtual ~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 override
virtual QIODevice *data(const QUrl &url) override
virtual void insert(QIODevice *device) override
virtual QNetworkCacheMetaData metaData(const QUrl &url) override
virtual QIODevice *prepare(const QNetworkCacheMetaData &metaData) override
virtual bool remove(const QUrl &url) override
virtual void updateMetaData(const QNetworkCacheMetaData &metaData) override

パブリック・スロット

virtual void clear() override

保護された関数

virtual qint64 expire()

詳細説明

QNetworkDiskCache は、QDataStream を使用して、各 url をcacheDirectory 内の独自のファイルに格納します。テキストの MimeType を持つファイルは、qCompress を使用して圧縮されます。データはinsert() とupdateMetaData() でのみディスクに書き込まれます。

現在のところ、複数のディスク・キャッシュで同じキャッシュ・ファイルを共有することはできません。

QNetworkDiskCache はデフォルトで、キャッシュがシステムで使用する容量を 50MB に制限しています。

キャッシュ・ディレクトリを設定しないと動作しないことに注意してください。

ネットワークディスクキャッシュは以下の方法で有効にできます:

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
QString directory = QStandardPaths::writableLocation(QStandardPaths::CacheLocation)
        + QLatin1StringView("/cacheDir/");
diskCache->setCacheDirectory(directory);
manager->setCache(diskCache);

リクエストを送るときに、キャッシュを使うときとネットワークを使うとき の優先順位を制御するには、以下のことを考慮する:

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

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

レスポンスがキャッシュから来たのか、ネットワークから来たのかをチェックするには、以下を適用することができる:

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

メンバー関数 ドキュメント

[explicit] QNetworkDiskCache::QNetworkDiskCache(QObject *parent = nullptr)

新しいディスクキャッシュを作成する。parent 引数はQAbstractNetworkCache のコンストラクタに渡されます。

[virtual noexcept] QNetworkDiskCache::~QNetworkDiskCache()

キャッシュ・オブジェクトを破棄する。これはディスク・キャッシュをクリアしません。

QString QNetworkDiskCache::cacheDirectory() const

キャッシュされたファイルが格納される場所を返します。

setCacheDirectory()も参照

[override virtual] qint64 QNetworkDiskCache::cacheSize() const

も参照してください:QAbstractNetworkCache::cacheSize() const.

[override virtual slot] void QNetworkDiskCache::clear()

再定義します:QAbstractNetworkCache::clear().

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

再リプルメント:QAbstractNetworkCache::data(const QUrl &url).

[virtual protected] qint64 QNetworkDiskCache::expire()

キャッシュのサイズが最大キャッシュサイズ以下になるようにキャッシュを削除します。キャッシュの現在のサイズを返します。

キャッシュの現在のサイズがmaximumCacheSize() より大きい場合、合計サイズがmaximumCacheSize() の 90% 未満になるまで、古いキャッシュ ファイルが削除されます。

サブクラスはこの関数を再実装して、キャッシュ・ファイルが削除される順序を変更できます。その際、QNetworkDiskCache が把握していないアプリケーションの情報 (キャッシュへのアクセス回数など) を考慮します。

注意: cacheSize() の呼び出しは、現在のキャッシュ・サイズが不明な場合に失効する。

maximumCacheSize() およびfileMetaData()も参照

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

キャッシュ・ファイルfileNameQNetworkCacheMetaData を返します。

fileName がキャッシュ・ファイルでない場合、QNetworkCacheMetaData は無効となる。

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

再実装:QAbstractNetworkCache::insert(QIODevice *device)。

qint64 QNetworkDiskCache::maximumCacheSize() const

ディスク・キャッシュの現在の最大サイズを返します。

setMaximumCacheSize()も参照してください

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

再実装:QAbstractNetworkCache::metaData(const QUrl &url)。

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

再リンプルメント:QAbstractNetworkCache::prepare(const QNetworkCacheMetaData &metaData)。

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

再リンプルメント: (const QUrl &url):QAbstractNetworkCache::remove(const QUrl &url)。

void QNetworkDiskCache::setCacheDirectory(const QString &cacheDir)

キャッシュ・ファイルを格納するディレクトリを設定します。cacheDir

QNetworkDiskCache このディレクトリが存在しない場合は作成されます。

準備されたキャッシュ・アイテムが挿入されると、新しいキャッシュ・ディレクトリに格納されます。

cacheDirectory() およびQStandardPaths::CacheLocationも参照してください

void QNetworkDiskCache::setMaximumCacheSize(qint64 size)

size にディスク・キャッシュの最大サイズを設定します。

新しいサイズが現在のキャッシュ・サイズより小さい場合、キャッシュはexpire() を呼び出します。

maximumCacheSize()も参照してください

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

再定義します:QAbstractNetworkCache::updateMetaData(const QNetworkCacheMetaData &metaData)。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。