このページでは

QQuickImageProvider Class

QQuickImageProvider クラスは、QML におけるピクマップおよびスレッド化された画像リクエストをサポートするためのインターフェースを提供します。詳細...

ヘッダー: #include <QQuickImageProvider>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
継承元: QQmlImageProviderBase
継承元:

QQuickAsyncImageProvider

パブリック関数

QQuickImageProvider(QQmlImageProviderBase::ImageType type, QQmlImageProviderBase::Flags flags = Flags())
virtual ~QQuickImageProvider() override
virtual QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize)
virtual QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
virtual QQuickTextureFactory *requestTexture(const QString &id, QSize *size, const QSize &requestedSize)

再実装されたパブリック関数

virtual QQmlImageProviderBase::Flags flags() const override
virtual QQmlImageProviderBase::ImageType imageType() const override

詳細な説明

QQuickImageProvider は、QML アプリケーションに高度な画像読み込み機能を提供するために使用されます。これにより、QML 内の画像を次のように処理できます:

  • 実際の画像ファイルではなく、QPixmap を使用して読み込む
  • 別のスレッドで非同期に読み込む

画像を画像プロバイダによって読み込むように指定するには、画像の URL ソースに「image:」スキームを使用し、その後に画像プロバイダの識別子と要求される画像の識別子を続けます。例えば:

Image { source: "image://myimageprovider/image.png" }

これは、画像が「myimageprovider」という名前の画像プロバイダによって読み込まれること、および読み込む画像の名前が「image.png」であることを指定しています。QMLエンジンは、QQmlEngine::addImageProvider() を通じて登録されたプロバイダに基づいて、適切な画像プロバイダを呼び出します。

識別子は大文字小文字を区別しませんが、URLの残りの部分は大文字小文字を区別したまま渡されることに注意してください。 たとえば、以下のスニペットでも、画像は「myimageprovider」という名前の画像プロバイダによって読み込まれることが指定されますが、上記のスニペットとは異なる画像(「image.png」ではなく「Image.png」)が要求されます。

Image { source: "image://MyImageProvider/Image.png" }

URLの残りの部分で大文字小文字を区別しないようにしたい場合は、画像プロバイダ内でその処理を自分で行う必要があります。

例

以下に 2 つの画像を示します。これらの `source ` 値は、これらが「colors」という名前の画像プロバイダによって読み込まれるべきであることを示しており、読み込まれる画像はそれぞれ「yellow」と「red」です:

Column {
    Image { source: "image://colors/yellow" }
    Image { source: "image://colors/red" }
}

QMLがこれらの画像を読み込む際、一致する画像プロバイダを検索し、そのrequestImage()またはrequestPixmap()メソッド(imageType()の値に応じて)を呼び出して画像を読み込みます。このメソッドは、最初の画像についてはid パラメータを「yellow」に、2番目の画像については「red」に設定して呼び出されます。

以下は、上記のQMLから要求された画像を読み込むことができる画像プロバイダの実装例です。この実装では、要求された色で塗りつぶされたQPixmap の画像を動的に生成します:

class ColorImageProvider : public QQuickImageProvider
{
public:
    ColorImageProvider()
               : QQuickImageProvider(QQuickImageProvider::Pixmap)
    {
    }

    QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override
    {
       int width = 100;
       int height = 50;

       if (size)
          *size = QSize(width, height);
       QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width,
                      requestedSize.height() > 0 ? requestedSize.height() : height);
       pixmap.fill(QColor(id).rgba());
       return pixmap;
    }
};

このプロバイダを QML から利用できるようにするため、「colors」という識別子で QML エンジンに登録します:

int main(int argc, char *argv[])
{

    QQuickView view;
    QQmlEngine *engine = view.engine();
    engine->addImageProvider(QLatin1String("colors"), new ColorImageProvider);
    view.setSource(QUrl::fromLocalFile(QStringLiteral("imageprovider-example.qml")));
    view.show();
    return app.exec();
}

これで、QML内で画像を正常に読み込むことができます:

画像提供元からの、上半分が黄色で下半分が赤の長方形

完全な実装については、「Image Provider Example」を参照してください。なお、この例では、前述のようにアプリケーションのmain() 関数でプロバイダを登録するのではなく、plugin を介してプロバイダを登録している点に注意してください。

"@nx" high DPI syntax を提供することも可能です。

画像の非同期読み込み

QImage またはテクスチャの読み込みをサポートする画像プロバイダーは、自動的に画像の非同期読み込みもサポートします。 画像ソースで非同期読み込みを有効にするには、関連するImage またはBorderImage オブジェクトのasynchronous プロパティをtrue に設定します。これを有効にすると、プロバイダへの画像リクエストは低優先度のスレッドで実行されるため、画像の読み込みをバックグラウンドで実行でき、ユーザーインターフェイスへのパフォーマンスへの影響を軽減できます。

asynchronous プロパティがtrue に設定されていない画像ソースであっても、非同期画像読み込みを強制するには、画像プロバイダーのコンストラクタにQQmlImageProviderBase::ForceAsynchronousImageLoading フラグを渡すことができます。これにより、そのプロバイダーに対するすべての画像リクエストが別のスレッドで処理されるようになります。

QPixmap を提供する画像プロバイダーの非同期読み込みは、ThreadedPixmaps 機能を備えたプラットフォームでのみサポートされています。ピクマップをメインスレッドでのみ作成できるプラットフォーム(つまり、ThreadedPixmaps がサポートされていないプラットフォーム)では、asynchronous がtrue に設定されている場合でも、その値は無視され、画像は同期的に読み込まれます。

ImageResponse 以外のタイプのプロバイダーによる非同期画像読み込みは、エンジンごとに単一のスレッド上で実行されます。つまり、処理に時間がかかる画像プロバイダーがあると、他のリクエストの読み込みがブロックされてしまいます。これを回避するには、QQuickAsyncImageProvider を使用し、QThreadPool などを通じてプロバイダー側でスレッド処理を実装することをお勧めします。完全な実装例については、「Image Response Provider Example」を参照してください。

画像のキャッシュ

QQuickImageProvider によって返される画像は、QML エンジンによって読み込まれる他の画像と同様に、自動的にキャッシュされます。「image://」というプレフィックスを持つ画像がキャッシュから読み込まれる場合、該当する画像プロバイダに対して `requestImage()` および `requestPixmap()` は呼び出されません。 画像を常に画像プロバイダから取得し、一切キャッシュしないようにするには、該当するImage またはBorderImage オブジェクトのcache プロパティをfalse に設定してください。

QQmlEngine::addImageProvider()も参照してください 。

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

QQuickImageProvider::QQuickImageProvider(QQmlImageProviderBase::ImageType type, QQmlImageProviderBase::Flags flags = Flags())

指定されたtype の画像を提供し、指定されたflags に従って動作する画像プロバイダを作成します。

[override virtual noexcept] QQuickImageProvider::~QQuickImageProvider()

以下を破棄しますQQuickImageProvider

注: 派生クラスのデストラクタは スレッドセーフである必要があります。

[override virtual] QQmlImageProviderBase::Flags QQuickImageProvider::flags() const

QQmlImageProviderBase::flags() const を再実装します。

このプロバイダに対して設定されているフラグを返します。

[override virtual] QQmlImageProviderBase::ImageType QQuickImageProvider::imageType() const

QQmlImageProviderBase::imageType() const を再実装します。

このプロバイダがサポートする画像タイプを返します。

[virtual] QImage QQuickImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)

このメソッドを実装して、id を含む画像を返してください。デフォルトの実装では、空の画像が返されます。

id は、リクエストされた画像ソースから「image:」スキームとプロバイダ識別子が削除されたものです。たとえば、画像source が「image://myprovider/icons/home」であった場合、指定されたid は「icons/home」となります。

requestedSize は、ImageアイテムによってリクエストされたImage::sourceSize に対応します。requestedSize が有効なサイズである場合、返される画像はそのサイズになるはずです。

いずれの場合も、size には画像の元のサイズを設定する必要があります。これは、関連するImage のwidth およびheight が明示的に設定されていない場合に、それらの値を設定するために使用されます。

注:この メソッドは複数のスレッドから呼び出される可能性があるため、このメソッドの実装が再入可能であることを確認してください。

[virtual] QPixmap QQuickImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)

このメソッドを実装して、id を含むピクマップを返します。デフォルトの実装では、空のピクマップが返されます。

id は、要求された画像ソースから「image:」スキーマとプロバイダ識別子が削除されたものです。たとえば、画像source が「image://myprovider/icons/home」であった場合、指定されたid は「icons/home」となります。

requestedSize は、Imageアイテムによって要求されたImage::sourceSize に対応します。requestedSize が有効なサイズである場合、返される画像はそのサイズである必要があります。

いずれの場合も、size は画像の元のサイズに設定する必要があります。これは、関連するImage のwidth およびheight が明示的に設定されていない場合に、これらの値を設定するために使用されます。

注:この メソッドは複数のスレッドから呼び出される可能性があるため、このメソッドの実装は再入可能であることを保証してください。

[virtual] QQuickTextureFactory *QQuickImageProvider::requestTexture(const QString &id, QSize *size, const QSize &requestedSize)

このメソッドを実装して、id を含むテクスチャを返してください。デフォルトの実装では、nullptr が返されます。

id は、要求された画像ソースから「image:」スキームとプロバイダ識別子が削除されたものです。たとえば、画像source が「image://myprovider/icons/home」であった場合、指定されたid は「icons/home」となります。

requestedSize は、ImageアイテムによってリクエストされたImage::sourceSize に対応します。requestedSize が有効なサイズである場合、返される画像はそのサイズである必要があります。

いずれの場合も、size は画像の元のサイズに設定する必要があります。これは、関連するImage のwidth およびheight が明示的に設定されていない場合に、これらの値を設定するために使用されます。

注:この メソッドは複数のスレッドから呼び出される可能性があるため、このメソッドの実装が再入可能であることを確認してください。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. 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.