Sur cette page

QQuickImageProvider Class

La classe `QQuickImageProvider` fournit une interface permettant de prendre en charge les images bitmap et les requêtes d'images multithread dans QML. En savoir plus...

En-tête : #include <QQuickImageProvider>
CMake : find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake : QT += quick
Hérite de : QQmlImageProviderBase
Hérité par :

QQuickAsyncImageProvider

Fonctions publiques

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)

Fonctions publiques réimplémentées

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

Description détaillée

QQuickImageProvider est utilisé pour fournir des fonctionnalités avancées de chargement d’images dans les applications QML. Il permet aux images dans QML d’être :

  • Chargées à l’aide de QPixmaps plutôt que de fichiers image réels
  • soient chargées de manière asynchrone dans un thread séparé

Pour spécifier qu'une image doit être chargée par un fournisseur d'images, utilisez le schéma « image: » pour la source URL de l'image, suivi des identifiants du fournisseur d'images et de l'image demandée. Par exemple :

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

Cela spécifie que l'image doit être chargée par le fournisseur d'images nommé « myimageprovider », et que l'image à charger s'appelle « image.png ». Le moteur QML invoque le fournisseur d'images approprié en fonction des fournisseurs qui ont été enregistrés via QQmlEngine::addImageProvider().

Notez que les identifiants ne sont pas sensibles à la casse, mais que le reste de l’URL sera transmis en conservant la casse d’origine. Par exemple, l’extrait de code ci-dessous spécifierait toujours que l’image doit être chargée par le fournisseur d’images nommé « myimageprovider », mais il demanderait une image différente de celle de l’extrait de code ci-dessus (« Image.png » au lieu de « image.png »).

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

Si vous souhaitez que le reste de l’URL ne soit pas sensible à la casse, vous devrez vous en charger vous-même au sein de votre fournisseur d’images.

Un exemple

Voici deux images. Leurs valeurs source indiquent qu’elles doivent être chargées par un fournisseur d’images nommé « colors », et les images à charger sont respectivement « yellow » et « red » :

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

Lorsque ces images sont chargées par QML, celui-ci recherche un fournisseur d’images correspondant et appelle sa méthode ` requestImage()` ou ` requestPixmap()` (en fonction de sa méthode ` imageType()`) pour charger l’image. La méthode est appelée avec le paramètre ` id ` défini sur « yellow » pour la première image et sur « red » pour la seconde.

Voici une implémentation de fournisseur d’images capable de charger les images demandées par le code QML ci-dessus. Cette implémentation génère dynamiquement des images QPixmap remplies de la couleur demandée :

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;
    }
};

Pour rendre ce fournisseur accessible à QML, il est enregistré auprès du moteur QML avec l’identifiant « colors » :

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();
}

Les images peuvent désormais être chargées avec succès dans le code QML :

Rectangle dont la moitié supérieure est jaune et la moitié inférieure rouge, provenant d'un fournisseur d'images

Consultez l’exemple de fournisseur d’images pour l’implémentation complète. Notez que l’exemple enregistre le fournisseur via une plugin au lieu de l’enregistrer dans la fonction d’ main() ation de l’application comme indiqué ci-dessus.

Il est possible de fournir une "@nx" high DPI syntax.

Chargement asynchrone des images

Les fournisseurs d’images prenant en charge l’ QImage ou le chargement de textures incluent automatiquement la prise en charge du chargement asynchrone des images. Pour activer le chargement asynchrone d’une source d’image, définissez la propriété ` asynchronous ` sur ` true ` pour l’objet ` Image ` ou ` BorderImage ` concerné. Lorsque cette option est activée, la requête d’image adressée au fournisseur s’exécute dans un thread à faible priorité, ce qui permet d’effectuer le chargement de l’image en arrière-plan et de réduire l’impact sur les performances de l’interface utilisateur.

Pour forcer le chargement asynchrone des images, même pour les sources d’images dont la propriété ` asynchronous ` n’est pas définie sur ` true`, vous pouvez transmettre le drapeau ` QQmlImageProviderBase::ForceAsynchronousImageLoading ` au constructeur du fournisseur d’images. Cela garantit que toutes les requêtes d’images adressées au fournisseur sont traitées dans un thread distinct.

Le chargement asynchrone pour les fournisseurs d’images proposant la propriété ` QPixmap ` n’est pris en charge que sur les plateformes dotées de la fonctionnalité `ThreadedPixmaps`. Sur les plateformes où les pixmaps ne peuvent être créés que dans le thread principal (c’est-à-dire où `ThreadedPixmaps` n’est pas pris en charge), si ` asynchronous ` est défini sur ` true`, cette valeur est ignorée et l’image est chargée de manière synchrone.

Le chargement asynchrone des images pour les fournisseurs d’un type autre que `ImageResponse` s’effectue sur un seul thread par moteur. Cela signifie qu’un fournisseur d’images lent bloquera le chargement de toute autre requête. Pour éviter cela, nous vous recommandons d’utiliser ` QQuickAsyncImageProvider ` et de mettre en œuvre le multithreading côté fournisseur via une propriété ` QThreadPool ` ou similaire. Consultez l’exemple de fournisseur de réponses d’images pour une implémentation complète.

Mise en cache des images

Les images renvoyées par un QQuickImageProvider sont automatiquement mises en cache, à l’instar de toute image chargée par le moteur QML. Lorsqu’une image préfixée par « image:// » est chargée à partir du cache, les méthodes requestImage() et requestPixmap() ne seront pas appelées pour le fournisseur d’images concerné. Si une image doit toujours être récupérée auprès du fournisseur d’images et ne doit en aucun cas être mise en cache, définissez la propriété cache sur false pour l’objet Image ou BorderImage concerné.

Voir également QQmlEngine::addImageProvider().

Documentation sur les fonctions membres

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

Crée un fournisseur d'images qui fournira les images de l'type spécifiée et se comportera conformément à la flags indiquée.

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

Détruit le QQuickImageProvider

Remarque : le destructeur de votre classe dérivée doit être sûr pour les threads.

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

Réimplémente : ` QQmlImageProviderBase::flags()` const.

Renvoie les indicateurs définis pour ce fournisseur.

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

Réimplémente : ` QQmlImageProviderBase::imageType()` const.

Renvoie le type d'image pris en charge par ce fournisseur.

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

Implémentez cette méthode pour renvoyer l'image avec l'id. L'implémentation par défaut renvoie une image vide.

L'id correspond à la source de l'image demandée, dont le schéma « image: » et l'identifiant du fournisseur ont été supprimés. Par exemple, si l'source de l'image était « image://myprovider/icons/home », l'id fournie serait « icons/home ».

L’ requestedSize correspond à l’ Image::sourceSize demandée par un élément Image. Si requestedSize est une taille valide, l’image renvoyée doit avoir cette taille.

Dans tous les cas, size doit être défini sur la taille d’origine de l’image. Cette valeur sert à définir les paramètres width et height de l’ Image concerné si ces valeurs n’ont pas été définies explicitement.

Remarque : cette méthode peut être appelée par plusieurs threads ; veillez donc à ce que son implémentation soit réentrante.

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

Implémentez cette méthode pour renvoyer le pixmap avec l'id. L'implémentation par défaut renvoie un pixmap vide.

L'id correspond à la source de l'image demandée, dont le schéma « image: » et l'identifiant du fournisseur ont été supprimés. Par exemple, si l'source de l'image était « image://myprovider/icons/home », l'id fournie serait « icons/home ».

L’ requestedSize correspond à l’ Image::sourceSize demandée par un élément Image. Si requestedSize est une taille valide, l’image renvoyée doit avoir cette taille.

Dans tous les cas, size doit être défini sur la taille d’origine de l’image. Cette valeur sert à définir les paramètres width et height de l’ Image concerné si ces valeurs n’ont pas été définies explicitement.

Remarque : cette méthode peut être appelée par plusieurs threads ; veillez donc à ce que son implémentation soit réentrante.

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

Implémentez cette méthode pour renvoyer la texture avec l'id. L'implémentation par défaut renvoie nullptr.

L'id correspond à la source de l'image demandée, dont le schéma « image: » et l'identifiant du fournisseur ont été supprimés. Par exemple, si l'image source était « image://myprovider/icons/home », l'id fournie serait « icons/home ».

L’ requestedSize correspond à l’ Image::sourceSize demandée par un élément Image. Si requestedSize est une taille valide, l’image renvoyée doit avoir cette taille.

Dans tous les cas, size doit être défini sur la taille d’origine de l’image. Cette valeur sert à définir l’ width et l’ height de l’ Image concerné si ces valeurs n’ont pas été définies explicitement.

Remarque : cette méthode peut être appelée par plusieurs threads ; veillez donc à ce que son implémentation soit réentrante.

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