QCanvasPainterItemRenderer Class
Le QCanvasPainterItemRenderer gère toute la peinture pour un QCanvasPainterItem. Plus....
| En-tête : | #include <QCanvasPainterItemRenderer> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| Depuis : | Qt 6.11 |
| Hérite : | QQuickRhiItemRenderer |
| Statut : | Technical Preview |
Fonctions publiques
| QCanvasPainterItemRenderer() | |
| virtual | ~QCanvasPainterItemRenderer() override |
| QColor | fillColor() const |
| bool | hasSharedPainter() const |
| float | height() const |
| QCanvasPainter * | painter() const |
| void | setSharedPainter(bool enable) |
| float | width() const |
Fonctions protégées
| void | beginCanvasPainting(QCanvasOffscreenCanvas &canvas) |
| void | endCanvasPainting() |
| void | grabCanvas(const QCanvasOffscreenCanvas &canvas, std::function<void (const QImage &)> callback) |
| virtual void | initializeResources(QCanvasPainter *painter) |
| virtual void | paint(QCanvasPainter *painter) |
| virtual void | prePaint(QCanvasPainter *painter) |
| virtual void | synchronize(QCanvasPainterItem *item) |
Fonctions protégées réimplémentées
| virtual void | initialize(QRhiCommandBuffer *cb) override |
| virtual void | render(QRhiCommandBuffer *cb) override |
| virtual void | synchronize(QQuickRhiItem *item) override |
Description détaillée
Implémentez la méthode paint() pour effectuer le rendu.
Pour exposer les données de l'élément au moteur de rendu à l'abri des threads, implémentez la méthode synchronize().
L'objet de rendu vit et opère sur le thread de rendu du graphe de scèneQt Quick , s'il y en a un, puisque c'est le thread sur lequel createItemRenderer() et toutes les fonctions de cette classe sont invoquées.
Si le site QCanvasPainterItem est déplacé vers un autre site window, il sera associé à un nouveau site QRhi. Par conséquent, l'objet de rendu est automatiquement détruit et un nouvel objet est créé en invoquant à nouveau createItemRenderer(). Cela permet une gestion simple des objets QCanvasImage et QCanvasOffscreenCanvas, car ils peuvent être des variables membres de l'objet renderer, configurées soit dans initializeResources() soit dans paint(), sans avoir à les réinitialiser lorsque les ressources graphiques sont perdues en raison du changement de fenêtre et de QRhi, puisque tout cela se produit implicitement par la destruction de l'objet renderer entier.
L'extrait de code ci-dessous montre la structure typique d'une sous-classe de QCanvasPainterItemRenderer. Voir QCanvasPainterItem pour un exemple de la classe MyItem.
class MyRenderer : public QCanvasPainterItemRenderer { public: void synchronize(QCanvasPainterItem *item) override { // copy a custom property value from item in a thread-safe manner m_value = static_cast<MyItem *>(item)->value(); } void initializeResources(QCanvasPainter *p) override { // load assets if (m_image.isNull()) m_image = p->addImage(QImage("image.png"), QCanvasPainter::ImageFlag::Repeat); } void prePaint(QCanvasPainter *p) override { // this is where offscreen canvases are drawn into if (m_canvas.isNull()) { m_canvas = p->createCanvas(QSize(640, 480)); beginCanvasPainting(m_canvas); // ... draw into the offscreen canvas endCanvasPainting(m_canvas); m_canvasImage = p->addImage(m_canvas); } } void paint(QCanvasPainter *p) override { QPointF center(width() / 2, height() / 2); // ... draw using m_value, m_image, and m_canvasImage } QCanvasImage m_image; QCanvasOffscreenCanvas m_canvas; QCanvasImage m_canvasImage; float m_value; };
Voir également QCanvasPainterItem.
Documentation des fonctions membres
QCanvasPainterItemRenderer::QCanvasPainterItemRenderer()
Construit un QCanvasPainterItemRenderer.
[override virtual noexcept] QCanvasPainterItemRenderer::~QCanvasPainterItemRenderer()
Détruit le site QCanvasPainterItemRenderer.
[protected] void QCanvasPainterItemRenderer::beginCanvasPainting(QCanvasOffscreenCanvas &canvas)
Commence à enregistrer les commandes de dessin de QCanvasPainter en ciblant canvas.
Remarque : cette fonction ne doit être appelée qu'à partir de prePaint().
beginCanvasPainting() doit toujours être suivie d'un appel correspondant à endCanvasPainting() avant de retourner à prePaint().
[protected] void QCanvasPainterItemRenderer::endCanvasPainting()
Indique la fin du dessin ciblant le canevas spécifié dans beginCanvasPainting().
Remarque : cette fonction ne doit être appelée qu'à partir de prePaint().
beginCanvasPainting() doit toujours être suivie de la fonction endCanvasPainting() correspondante avant de revenir à prePaint().
QColor QCanvasPainterItemRenderer::fillColor() const
Renvoie la couleur de remplissage actuelle de l'élément. Cette couleur peut être définie par le parent QCanvasPainterItem.
[protected] void QCanvasPainterItemRenderer::grabCanvas(const QCanvasOffscreenCanvas &canvas, std::function<void (const QImage &)> callback)
Emet une demande de relecture de texture pour canvas.
callback est invoquée soit avant le retour de la fonction, soit plus tard, en fonction de l'implémentation sous-jacente de QRhi et de l'API 3D. La relecture du contenu des textures peut impliquer une copie GPU->CPU, en fonction de l'architecture du GPU.
bool QCanvasPainterItemRenderer::hasSharedPainter() const
Renvoie true si ce moteur de rendu d'élément utilise un peintre partagé.
Voir aussi setSharedPainter.
float QCanvasPainterItemRenderer::height() const
Renvoie la hauteur de la zone peinte, en unités logiques, sans scale factor (device pixel ratio). Cette valeur est généralement identique à celle de l'élément peintre height, sauf si QQuickRhiItem::fixedColorBufferHeight a été défini.
[override virtual protected] void QCanvasPainterItemRenderer::initialize(QRhiCommandBuffer *cb)
Réimplémente : QQuickRhiItemRenderer::initialize(QRhiCommandBuffer *cb).
[virtual protected] void QCanvasPainterItemRenderer::initializeResources(QCanvasPainter *painter)
Réimplémentez cette méthode pour initialiser les ressources à l'aide de painter. Elle sera appelée une fois avant le premier synchronize().
Remarque : cette fonction n'est pas appelée lorsque la taille de QCanvasPainterItem change.
Voir également QCanvasPainter::addImage et QCanvasPainter::createCanvas.
[virtual protected] void QCanvasPainterItemRenderer::paint(QCanvasPainter *painter)
Réimplémentez cette méthode pour peindre en utilisant painter.
Cette méthode sera appelée une fois que l'élément aura été rempli avec fillColor().
paint() est appelé depuis le thread du moteur de rendu. Pour accéder aux données de l'élément en toute sécurité, copiez-les dans synchronize().
Voir également synchronize().
QCanvasPainter *QCanvasPainterItemRenderer::painter() const
Renvoie le peintre attaché à cet élément de peintre.
[virtual protected] void QCanvasPainterItemRenderer::prePaint(QCanvasPainter *painter)
Cette fonction est appelée au début du rendu à l'aide de painter, avant paint().
Aucune cible de rendu n'est active lorsque cette fonction est appelée. Appelez beginCanvasPainting() pour initialiser le dessin dans un canevas hors écran.
Voir également beginCanvasPainting() et endCanvasPainting().
[override virtual protected] void QCanvasPainterItemRenderer::render(QRhiCommandBuffer *cb)
Réimplémente : QQuickRhiItemRenderer::render(QRhiCommandBuffer *cb).
void QCanvasPainterItemRenderer::setSharedPainter(bool enable)
Désactiver le partage de peinture si enable est false.
Le partage de peintre est activé par défaut.
Lorsque le partage de peintre est activé, tous les éléments de peintre à l'intérieur du même QQuickWindow utiliseront le même QCanvasPainter.
Si la désactivation du partage de peintre est souhaitée, cette fonction doit être appelée suffisamment tôt, par exemple à partir du constructeur de la classe dérivée. La modifier après coup, lorsque l'élément a déjà été initialisé pour la peinture, n'aura aucun effet.
Si deux éléments utilisent des peintres dédiés, non partagés, les ressources graphiques de l'autre, telles que celles qui soutiennent QCanvasImage ou QOffscreenCanvas, ne leur seront pas visibles. En revanche, si les éléments se trouvent dans la même fenêtre et que le partage est activé, ils peuvent utiliser les images ou les toiles créées par l'autre élément, car ils utilisent tous deux le même site QCanvasPainter.
Note : Même lorsque enable est vrai, les peintres ne sont pas partagés entre des éléments appartenant à des instances QQuickWindow différentes, et par extension, à des graphes de scène différents.
Voir également hasSharedPainter.
[virtual protected] void QCanvasPainterItemRenderer::synchronize(QCanvasPainterItem *item)
Réimplémenter cette méthode pour synchroniser les données entre item et les instances de peinture d'éléments. Cette méthode sera appelée avant paint() chaque fois que l'élément devra être repeint.
Cette méthode est le seul endroit où il est sûr pour le peintre et l'objet de lire et d'écrire leurs variables respectives.
Habituellement, vous devriez static_cast item à votre type d'objet réel, et ensuite échanger les données.
Note : Assurez-vous de réimplémenter cette surcharge, en prenant un QCanvasPainterItem, au lieu du base class' version qui prend un QQuickRhiItem.
[override virtual protected] void QCanvasPainterItemRenderer::synchronize(QQuickRhiItem *item)
Réimplémente : QQuickRhiItemRenderer::synchronize(QQuickRhiItem *item).
float QCanvasPainterItemRenderer::width() const
Renvoie la largeur de la zone peinte, en unités logiques, sans scale factor (device pixel ratio). Cette largeur est généralement identique à celle de l'élément peintre width, sauf si QQuickRhiItem::fixedColorBufferWidth a été défini.
© 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.