QCanvasPainterWidget Class
QCanvasPainterWidget est un widget de rendu utilisant QCanvasPainter. Plus...
| En-tête : | #include <QCanvasPainterWidget> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| Depuis : | Qt 6.11 |
| Hérite : | QRhiWidget |
| Statut : | Technical Preview |
Fonctions publiques
| QCanvasPainterWidget(QWidget *parent = nullptr) | |
| virtual | ~QCanvasPainterWidget() override |
| QColor | fillColor() const |
| void | grabCanvas(const QCanvasOffscreenCanvas &canvas, std::function<void (const QImage &)> callback) |
| bool | hasSharedPainter() const |
| void | setFillColor(const QColor &color) |
| void | setSharedPainter(bool enable) |
Fonctions protégées
| void | beginCanvasPainting(QCanvasOffscreenCanvas &canvas) |
| void | endCanvasPainting() |
| virtual void | graphicsResourcesInvalidated() |
| virtual void | initializeResources(QCanvasPainter *painter) |
| virtual void | paint(QCanvasPainter *painter) |
| virtual void | prePaint(QCanvasPainter *painter) |
Fonctions protégées réimplémentées
| virtual void | initialize(QRhiCommandBuffer *cb) override |
| virtual void | releaseResources() override |
| virtual void | render(QRhiCommandBuffer *cb) override |
Description détaillée
Implémentez la fonction virtuelle paint dans une sous-classe pour effectuer le rendu à l'aide d'un QCanvasPainter.
L'extrait de code ci-dessous montre la structure typique d'une sous-classe de QCanvasPainterWidget :
class MyWidget : public QCanvasPainterWidget { public: void initializeResources(QCanvasPainter *p) override { // load assets if (m_image.isNull()) m_image = p->addImage(QImage("image.png"), QCanvasPainter::ImageFlag::Repeat); } void paint(QCanvasPainter *p) override { // ... draw using m_image } void graphicsResourcesInvalidated() override { // textures are lost, indicate the need for reload m_image = {}; } QCanvasImage m_image; };
Documentation des fonctions membres
[explicit] QCanvasPainterWidget::QCanvasPainterWidget(QWidget *parent = nullptr)
Construit un QCanvasPainterWidget avec l'adresse parent.
[override virtual noexcept] QCanvasPainterWidget::~QCanvasPainterWidget()
Détruit le site QCanvasPainterWidget.
[protected] void QCanvasPainterWidget::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 de la fonction endCanvasPainting() correspondante avant de retourner à prePaint().
L'extrait suivant d'une sous-classe de QCanvasPainterWidget montre comment un canevas hors écran peut être rendu puis utilisé comme image ou motif d'image lors du dessin du contenu du widget :
class MyWidget : public QCanvasPainterWidget { public: QCanvasOffscreenCanvas canvas; QCanvasImage canvasImage; void graphicsResourcesInvalidated() override { canvas = {}; // so that the next prePaint() will recreate and redraw the canvas } void prePaint(QCanvasPainter *p) override { if (canvas.isNull()) { canvas = p->createCanvas(QSize(320, 240)); beginCanvasPainting(canvas); p->beginPath(); p->circle(160, 120, 20); p->setFillStyle(Qt::red); p->fill(); endCanvasPainting(); canvasImage = p->addImage(canvas, QCanvasPainter::ImageFlag::Repeat); } } void paint(QCanvasPainter *p) override { // use canvasImage as a brush or with drawImage() } };
[protected] void QCanvasPainterWidget::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 QCanvasPainterWidget::fillColor() const
Renvoie la couleur de remplissage actuelle.
Voir aussi setFillColor().
void QCanvasPainterWidget::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.
[virtual protected] void QCanvasPainterWidget::graphicsResourcesInvalidated()
Appelé lorsque les ressources graphiques sous-jacentes, telles que les textures, sont perdues.
Cela indique que les objets QCanvasImage renvoyés par addImage() ne sont plus valides et que addImage() doit être appelée à nouveau. Si l'implémentation de paint() est telle que cela n'a pas d'importance, par exemple parce que les images ne sont pas utilisées ou que addImage() est toujours appelée, aucune action n'est nécessaire. Dans le cas contraire, il est recommandé d'activer un drapeau, ou autre, et d'agir en conséquence lors de la prochaine invocation de paint().
Il en va de même pour les objets QCanvasOffscreenCanvas renvoyés par QCanvasPainter::createCanvas(). Lorsque cette fonction est appelée, la prochaine invocation de paint() doit créer de nouvelles toiles et redessiner leur contenu.
Les ressources graphiques peuvent être perdues, par exemple, lorsque le widget est déplacé vers une nouvelle fenêtre de niveau supérieur, car cela implique d'être associé à une nouvelle instance QRhi.
Voir aussi QRhiWidget::releaseResources().
bool QCanvasPainterWidget::hasSharedPainter() const
Retourne true si ce widget utilise un peintre partagé.
Voir également setSharedPainter.
[override virtual protected] void QCanvasPainterWidget::initialize(QRhiCommandBuffer *cb)
Réimplémente : QRhiWidget::initialize(QRhiCommandBuffer *cb).
[virtual protected] void QCanvasPainterWidget::initializeResources(QCanvasPainter *painter)
Réimplémentez cette méthode pour initialiser les ressources à l'aide de painter. En général, cette méthode est appelée une fois avant les premiers prePaint() et paint(). Une exception est faite lorsque les ressources graphiques sont perdues, voir graphicsResourcesInvalidated(). Dans ce cas, cette méthode sera appelée à nouveau par la suite.
L'implémentation par défaut est vide.
[virtual protected] void QCanvasPainterWidget::paint(QCanvasPainter *painter)
Réimplémentez cette méthode pour peindre en utilisant painter.
Le widget est d'abord rempli avec fillColor().
L'implémentation par défaut est vide.
[virtual protected] void QCanvasPainterWidget::prePaint(QCanvasPainter *painter)
Réimplémentez cette fonction pour dessiner dans une ou plusieurs toiles hors écran à l'aide de painter.
L'implémentation par défaut est vide.
Voir aussi beginCanvasPainting() et endCanvasPainting().
[override virtual protected] void QCanvasPainterWidget::releaseResources()
Réimplémente : QRhiWidget::releaseResources().
[override virtual protected] void QCanvasPainterWidget::render(QRhiCommandBuffer *cb)
Réimplémente : QRhiWidget::render(QRhiCommandBuffer *cb).
void QCanvasPainterWidget::setFillColor(const QColor &color)
Définissez la couleur de remplissage sur color. Cette couleur sera utilisée pour dessiner l'arrière-plan de l'élément. La couleur par défaut est le noir.
Voir aussi fillColor().
void QCanvasPainterWidget::setSharedPainter(bool enable)
Désactiver le partage de peintre si enable est false.
Si le partage du peintre est activé, toutes les instances de QCanvasPainterWidget à l'intérieur du même QWindow utiliseront le même QCanvasPainter. Cette fonction doit être créée au début, par exemple à partir du constructeur de la classe dérivée, et ne doit pas être modifiée par la suite.
Le partage du peintre est activé par défaut.
Si deux widgets 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 widgets 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 widget, car ils utilisent tous deux le même QCanvasPainter.
Remarque : même lorsque enable est vrai, les peintres ne sont pas partagés entre les widgets appartenant à des fenêtres différentes (widgets de niveau supérieur).
Voir également hasSharedPainter.
© 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.