QQuickImageProvider Class

QQuickImageProvider クラスは、QML で pixmap やスレッド画像要求をサポートするためのインターフェイスを提供します。詳細...

ヘッダ #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 アプリケーションで高度な画像読み込み機能を提供するために使用されます。QQuickImageProvider は、QML アプリケーションに高度な画像読み込み機能を提供するために使用されます:

  • 実際の画像ファイルではなく QPixmaps を使った読み込み。
  • 別スレッドでの非同期読み込み

画像プロバイダから画像を読み込むように指定するには、画像の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によって読み込まれるとき、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で画像を読み込むことができるようになりました:

完全な実装は画像プロバイダの例を参照してください。なお、この例では、上記のようにアプリケーションのmain() 関数でプロバイダを登録するのではなく、plugin 経由でプロバイダを登録しています。

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

非同期画像ロード

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

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

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

ImageResponse 以外のタイプのプロバイダーの非同期画像ロードは、エンジンごとにシングルスレッドで実行されます。つまり、遅い画像プロバイダは他のリクエストの読み込みをブロックしてしまいます。それを避けるために、QQuickAsyncImageProvider を使用し、QThreadPool などでプロバイダ側にスレッドを実装することをお勧めします。完全な実装については、画像レスポンス・プロバイダの例を参照してください。

画像のキャッシュ

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::sourceSize に対応する。requestedSize が有効なサイズであれば、返される画像はそのサイズでなければならない。

すべての場合において、size は画像のオリジナルサイズに設定されなければならない。これは、関連するImagewidthheight の値が明示的に設定されていない場合に、これらの値を設定するために使用されます。

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

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

このメソッドを実装して、id の pixmap を返します。デフォルトの実装は空の pixmap を返します。

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

requestedSize は、イメージアイテムが要求するImage::sourceSize に対応する。requestedSize が有効なサイズであれば、返される画像はそのサイズでなければならない。

すべての場合において、size は画像のオリジナルサイズに設定されなければならない。これは、関連するImagewidthheight の値が明示的に設定されていない場合に、これらの値を設定するために使用されます。

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

[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::sourceSize に対応する。requestedSize が有効なサイズであれば、返される画像はそのサイズでなければならない。

すべての場合において、size は画像のオリジナルサイズに設定されなければならない。これは、関連するImagewidthheight の値が明示的に設定されていない場合に、これらの値を設定するために使用されます。

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

© 2025 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.