Sur cette page

QRegion Class

La classe QRegion définit une zone de découpe pour un « painter ». En savoir plus...

En-tête : #include <QRegion>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui

Types publics

enum RegionType { Rectangle, Ellipse }
const_iterator
const_reverse_iterator

Fonctions publiques

QRegion()
QRegion(const QBitmap &bm)
QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)
QRegion(int x, int y, int w, int h, QRegion::RegionType t = Rectangle)
QRegion(const QRect &r, QRegion::RegionType t = Rectangle)
QRegion(const QRegion &r)
QRegion(QRegion &&other)
QRegion::const_iterator begin() const
QRect boundingRect() const
QRegion::const_iterator cbegin() const
QRegion::const_iterator cend() const
bool contains(const QPoint &p) const
bool contains(const QRect &r) const
QRegion::const_reverse_iterator crbegin() const
QRegion::const_reverse_iterator crend() const
QRegion::const_iterator end() const
QRegion intersected(const QRect &rect) const
QRegion intersected(const QRegion &r) const
bool intersects(const QRect &rect) const
bool intersects(const QRegion &region) const
bool isEmpty() const
bool isNull() const
QRegion::const_reverse_iterator rbegin() const
int rectCount() const
(since 6.8) QSpan<const QRect> rects() const
QRegion::const_reverse_iterator rend() const
(since 6.8) void setRects(QSpan<const QRect> rects)
QRegion subtracted(const QRegion &r) const
void swap(QRegion &other)
(since 6.0) HRGN toHRGN() const
void translate(int dx, int dy)
void translate(const QPoint &point)
QRegion translated(int dx, int dy) const
QRegion translated(const QPoint &p) const
QRegion united(const QRect &rect) const
QRegion united(const QRegion &r) const
QRegion xored(const QRegion &r) const
operator QVariant() const
bool operator!=(const QRegion &other) const
QRegion operator&(const QRegion &r) const
QRegion operator&(const QRect &r) const
QRegion &operator&=(const QRegion &r)
QRegion &operator&=(const QRect &r)
QRegion operator+(const QRegion &r) const
QRegion operator+(const QRect &r) const
QRegion &operator+=(const QRect &rect)
QRegion &operator+=(const QRegion &r)
QRegion operator-(const QRegion &r) const
QRegion &operator-=(const QRegion &r)
QRegion &operator=(QRegion &&other)
QRegion &operator=(const QRegion &r)
bool operator==(const QRegion &r) const
QRegion operator^(const QRegion &r) const
QRegion &operator^=(const QRegion &r)
QRegion operator|(const QRegion &r) const
QRegion &operator|=(const QRegion &r)

Membres publics statiques

(since 6.0) QRegion fromHRGN(HRGN hrgn)
QDataStream &operator<<(QDataStream &s, const QRegion &r)
QDataStream &operator>>(QDataStream &s, QRegion &r)

Description détaillée

QRegion s'utilise avec QPainter::setClipRegion() pour limiter la zone de dessin à ce qui doit être dessiné. Il existe également une fonction QWidget::repaint() qui prend un paramètre QRegion. QRegion est l'outil idéal pour réduire au minimum la surface d'écran à mettre à jour lors d'un rafraîchissement.

Cette classe n’est pas adaptée à la construction de formes destinées au rendu, en particulier en tant que contours. Utilisez QPainterPath pour créer des chemins et des formes à utiliser avec QPainter.

QRegion est une classe implicitement partagée.

Création et utilisation de régions

Une région peut être créée à partir d’un rectangle, d’une ellipse, d’un polygone ou d’un bitmap. Des régions complexes peuvent être créées en combinant des régions simples à l’aide de ` united()`, ` intersected()`, ` subtracted()` ou ` xored()` (ou exclusif). Vous pouvez déplacer une région à l’aide de ` translate()`.

Vous pouvez vérifier si une région est de type isEmpty() ou si elle contains() une QPoint ou une QRect. Le rectangle englobant peut être obtenu à l’aide de boundingRect().

Une itération sur la région (à l’aide de begin(), end() ou de boucles for-range) permet d’obtenir une décomposition de la région en rectangles.

Exemple d’utilisation de régions complexes :

void MyWidget::paintEvent(QPaintEvent *)
{
    QRegion r1(QRect(100, 100, 200, 80),    // r1: elliptic region
               QRegion::Ellipse);
    QRegion r2(QRect(100, 120, 90, 30));    // r2: rectangular region
    QRegion r3 = r1.intersected(r2);        // r3: intersection

    QPainter painter(this);
    painter.setClipRegion(r3);
    // ...                                  // paint clipped graphics
}

Voir également QPainter::setClipRegion(), QPainter::setClipRect() et QPainterPath.

Documentation sur les types de membres

enum QRegion::RegionType

Définit la forme de la région à créer.

ConstanteValeurDescription
QRegion::Rectangle0la région couvre l'intégralité du rectangle.
QRegion::Ellipse1la région est une ellipse située à l'intérieur du rectangle.

QRegion::const_iterator

Un itérateur sur les rectangles non superposés qui composent la région.

L'union de tous ces rectangles est égale à la région d'origine.

QRegion ne propose pas d'itérateurs modifiables.

Voir également begin() et end().

QRegion::const_reverse_iterator

Un itérateur inversé sur les rectangles non superposés qui composent la région.

L'union de tous ces rectangles est égale à la région d'origine.

QRegion ne propose pas d’itérateurs modifiables.

Voir également rbegin() et rend().

Documentation des fonctions membres

QRegion::QRegion()

Crée une région vide.

Voir aussi isEmpty().

QRegion::QRegion(const QBitmap &bm)

Crée une région à partir du bitmap bm.

La région obtenue est constituée des pixels de l'image bitmap bm qui sont Qt::color1, comme si chaque pixel était un rectangle de 1 par 1.

Ce constructeur peut créer des régions complexes qui ralentiront le traçage lors de leur utilisation. Notez que le traçage de bitmaps masqués peut être effectué beaucoup plus rapidement à l’aide de la fonction QPixmap::setMask().

QRegion::QRegion(const QPolygon &a, Qt::FillRule fillRule = Qt::OddEvenFill)

Construit une région polygonale à partir du tableau de points a, selon la règle de remplissage spécifiée par fillRule.

Si fillRule est Qt::WindingFill, la région polygonale est définie à l'aide de l'algorithme de winding ; si elle est Qt::OddEvenFill, c'est l'algorithme de remplissage pair-impair qui est utilisé.

Avertissement : ce constructeur peut être utilisé pour créer des régions complexes qui ralentiront le rendu lors de leur utilisation.

QRegion::QRegion(int x, int y, int w, int h, QRegion::RegionType t = Rectangle)

Crée une région rectangulaire ou elliptique.

Si ` t ` vaut ` Rectangle`, la région est le rectangle rempli (`x`, ` y`, ` w`, ` h`). Si ` t ` vaut ` Ellipse`, la région est l'ellipse remplie dont le centre est situé en (`x + w / 2`, ` y + h / 2`) et dont les dimensions sont (`w `, `h`).

QRegion::QRegion(const QRect &r, QRegion::RegionType t = Rectangle)

Créer une région à partir du rectangle r avec le type de région t.

Si le rectangle n’est pas valide, une région nulle sera créée.

Il s'agit d'une fonction surchargée.

Voir également QRegion::RegionType.

QRegion::QRegion(const QRegion &r)

Crée une nouvelle région qui est identique à la région r.

[noexcept] QRegion::QRegion(QRegion &&other)

Crée une nouvelle région à partir de la région other. Après l'appel, other est nul.

Voir également isNull().

[noexcept] QRegion::const_iterator QRegion::begin() const

Renvoie un objet ` const_iterator ` pointant vers le début de l'intervalle des rectangles non superposés qui composent la région.

L’union de tous ces rectangles correspond à la région d’origine.

Voir également rbegin(), cbegin() et end().

[noexcept] QRect QRegion::boundingRect() const

Renvoie le rectangle englobant de cette région. Une région vide renvoie un rectangle de dimensions QRect::isNull().

[noexcept] QRegion::const_iterator QRegion::cbegin() const

Identique à ` begin()`.

[noexcept] QRegion::const_iterator QRegion::cend() const

Identique à ` end()`.

bool QRegion::contains(const QPoint &p) const

Renvoie ` true ` si la région contient le point ` p` ; sinon, renvoie ` false`.

bool QRegion::contains(const QRect &r) const

Renvoie ` true ` si la région recouvre le rectangle ` r` ; sinon, renvoie ` false`.

Il s'agit d'une fonction surchargée.

[noexcept] QRegion::const_reverse_iterator QRegion::crbegin() const

Identique à ` rbegin()`.

[noexcept] QRegion::const_reverse_iterator QRegion::crend() const

Identique à ` rend()`.

[noexcept] QRegion::const_iterator QRegion::end() const

Renvoie un objet de type « const_iterator » pointant sur un emplacement situé juste après la fin des rectangles non superposés qui composent la région.

L'union de tous ces rectangles est égale à la région d'origine.

Voir également rend(), cend() et begin().

[static, since 6.0] QRegion QRegion::fromHRGN(HRGN hrgn)

Renvoie un objet ` QRegion ` équivalent à l'objet ` hrgn` fourni.

Cette fonction a été introduite dans Qt 6.0.

QRegion QRegion::intersected(const QRect &rect) const

Renvoie une région qui correspond à l'intersection de cette région et de la région spécifiée par ` rect`.

Voir également subtracted(), united() et xored().

QRegion QRegion::intersected(const QRegion &r) const

Renvoie une région qui correspond à l'intersection de cette région et de r.

Intersection régionale

La figure illustre l'intersection de deux régions elliptiques.

Voir également subtracted(), united() et xored().

bool QRegion::intersects(const QRect &rect) const

Renvoie « true » si cette région recoupe « rect », sinon renvoie « false ».

bool QRegion::intersects(const QRegion &region) const

Renvoie « true » si cette région recoupe « region », sinon renvoie « false ».

bool QRegion::isEmpty() const

Renvoie « true » si la région est vide ; sinon, renvoie « false ». Une région vide est une région qui ne contient aucun point.

Exemple :

QRegion r1(10, 10, 20, 20);
r1.isEmpty();               // false

QRegion r3;
r3.isEmpty();               // true

QRegion r2(40, 40, 20, 20);
r3 = r1.intersected(r2);    // r3: intersection of r1 and r2
r3.isEmpty();               // true

r3 = r1.united(r2);         // r3: union of r1 and r2
r3.isEmpty();               // false

bool QRegion::isNull() const

Renvoie « true » si la région est vide ; sinon, renvoie « false ». Une région vide est une région qui ne contient aucun point. Cette fonction est identique à isEmpty

Voir également isEmpty().

[noexcept] QRegion::const_reverse_iterator QRegion::rbegin() const

Renvoie un objet ` const_reverse_iterator ` pointant vers le début de l'ensemble des rectangles non superposés qui composent la région.

L'union de tous ces rectangles correspond à la région d'origine.

Voir également begin(), crbegin() et rend().

[noexcept] int QRegion::rectCount() const

Renvoie le nombre de rectangles qui composent cette région. Équivalent à ` end() - begin()`.

[noexcept, since 6.8] QSpan<const QRect> QRegion::rects() const

Renvoie un ensemble de rectangles non superposés qui composent la région. Cet ensemble reste valide jusqu'au prochain appel d'une méthode modifiante (non constante) sur cette région.

L'union de tous ces rectangles est égale à la région d'origine.

Remarque : cette fonction existait déjà dans Qt 5, mais renvoyait alors QVector<QRect>.

Cette fonction a été introduite dans Qt 6.8.

Voir également setRects().

[noexcept] QRegion::const_reverse_iterator QRegion::rend() const

Renvoie un objet ` const_reverse_iterator ` pointant sur un emplacement situé juste après la fin de la plage de rectangles non superposés qui composent la région.

L'union de tous ces rectangles est égale à la région d'origine.

Voir également end(), crend() et rbegin().

[since 6.8] void QRegion::setRects(QSpan<const QRect> rects)

Définit la région à l'aide du tableau de rectangles spécifié par ` rects`. Les rectangles doivent être triés de manière optimale selon les coordonnées Y-X et respecter les contraintes suivantes :

  • Les rectangles ne doivent pas se chevaucher.
  • Tous les rectangles ayant une même coordonnée supérieure doivent avoir la même hauteur.
  • Aucun rectangle ne doit être contigu à un autre horizontalement (dans ce cas, ils doivent être fusionnés en un seul rectangle plus large).
  • Les rectangles doivent être triés par ordre croissant, avec Y comme clé de tri principale et X comme clé de tri secondaire.

Remarque : pour des raisons historiques, rects.size() doit être inférieur à INT_MAX (voir rectCount()).

Cette fonction a été introduite dans Qt 6.8.

Voir également rects().

QRegion QRegion::subtracted(const QRegion &r) const

Renvoie une région obtenue en soustrayant r de cette région.

Soustraction de régions

La figure illustre le résultat obtenu lorsque l'ellipse de droite est soustraite de celle de gauche (left - right).

Voir également intersected(), united() et xored().

[noexcept] void QRegion::swap(QRegion &other)

Permute cette région avec celle de other. Cette opération est très rapide et ne pose jamais de problème.

[since 6.0] HRGN QRegion::toHRGN() const

Renvoie un HRGN équivalent à la région indiquée.

Cette fonction a été introduite dans Qt 6.0.

void QRegion::translate(int dx, int dy)

Translate (déplace) la région dx le long de l'axe X et dy le long de l'axe Y.

void QRegion::translate(const QPoint &point)

Translate la région point.x() le long de l'axe x et point.y() le long de l'axe y, par rapport à la position actuelle. Les valeurs positives déplacent la région vers la droite et vers le bas.

Translate vers l'point.

Il s'agit d'une fonction surchargée.

QRegion QRegion::translated(int dx, int dy) const

Renvoie une copie de la région décalée de dx sur l’axe x et de dy sur l’axe y, par rapport à la position actuelle. Les valeurs positives déplacent la région vers la droite et vers le bas.

Voir également translate().

QRegion QRegion::translated(const QPoint &p) const

Renvoie une copie du rectangle translaté de p.x() le long de l'axe x et de p.y() le long de l'axe y, par rapport à la position actuelle. Les valeurs positives déplacent le rectangle vers la droite et vers le bas.

Il s'agit d'une fonction surchargée.

Voir également translate().

QRegion QRegion::united(const QRect &rect) const

Renvoie une région qui correspond à l'union de cette région et de la région spécifiée rect.

Voir également intersected(), subtracted() et xored().

QRegion QRegion::united(const QRegion &r) const

Renvoie une région qui correspond à l'union de cette région et de r.

Union régionale

La figure illustre l'union de deux régions elliptiques.

Voir également intersected(), subtracted() et xored().

QRegion QRegion::xored(const QRegion &r) const

Renvoie une région qui correspond au « ou exclusif » (XOR) de cette région et de r.

Région XORée

La figure illustre le ou exclusif de deux régions elliptiques.

Voir également intersected(), united() et subtracted().

QRegion::operator QVariant() const

Renvoie la région sous la forme d'un QVariant

bool QRegion::operator!=(const QRegion &other) const

Renvoie « true » si cette région est différente de la région « other » ; sinon, renvoie « false ».

QRegion QRegion::operator&(const QRegion &r) const

Applique la fonction intersected() à cette région et à r. r1&r2 équivaut à r1.intersected(r2).

Voir également intersected().

QRegion QRegion::operator&(const QRect &r) const

Il s'agit d'une fonction surchargée.

QRegion &QRegion::operator&=(const QRegion &r)

Applique la fonction intersected() à cette région et à r, puis attribue le résultat à cette région. r1&=r2 équivaut à r1 = r1.intersected(r2).

Voir également intersected().

QRegion &QRegion::operator&=(const QRect &r)

Il s'agit d'une fonction surchargée.

QRegion QRegion::operator+(const QRegion &r) const

Applique la fonction united() à cette région et à r. r1+r2 équivaut à r1.united(r2).

Voir également united() et operator|().

QRegion QRegion::operator+(const QRect &r) const

Il s'agit d'une fonction surchargée.

QRegion &QRegion::operator+=(const QRect &rect)

Renvoie une région qui correspond à l'union de cette région et de la région spécifiée rect.

Voir également united().

QRegion &QRegion::operator+=(const QRegion &r)

Applique la fonction ` united()` à cette région et ` r `, puis attribue le résultat à cette région. ` r1+=r2 ` équivaut à ` r1 = r1.united(r2)`.

Voir également intersected().

QRegion QRegion::operator-(const QRegion &r) const

Applique la fonction subtracted() à cette région et à r. r1-r2 équivaut à r1.subtracted(r2).

Voir également subtracted().

QRegion &QRegion::operator-=(const QRegion &r)

Applique la fonction ` subtracted()` à cette région et ` r `, puis attribue le résultat à cette région. ` r1-=r2 ` équivaut à ` r1 = r1.subtracted(r2)`.

Voir également subtracted().

[noexcept] QRegion &QRegion::operator=(QRegion &&other)

Cette opération affecte l'other à cette instance QRegion.

QRegion &QRegion::operator=(const QRegion &r)

Attribue la valeur « r » à cette région et renvoie une référence à celle-ci.

bool QRegion::operator==(const QRegion &r) const

Renvoie « true » si la région est égale à « r » ; sinon, renvoie « false ».

QRegion QRegion::operator^(const QRegion &r) const

Applique la fonction xored() à cette région et à r. r1^r2 équivaut à r1.xored(r2).

Voir également xored().

QRegion &QRegion::operator^=(const QRegion &r)

Applique la fonction ` xored()` à cette région et ` r `, puis attribue le résultat à cette région. ` r1^=r2 ` équivaut à ` r1 = r1.xored(r2)`.

Voir également xored().

QRegion QRegion::operator|(const QRegion &r) const

Applique la fonction united() à cette région et r. r1|r2 équivaut à r1.united(r2).

Voir également united() et operator+().

QRegion &QRegion::operator|=(const QRegion &r)

Applique la fonction ` united()` à cette région et ` r `, puis attribue le résultat à cette région. ` r1|=r2 ` équivaut à ` r1 = r1.united(r2)`.

Voir également united().

Éléments non membres associés

QDataStream &operator<<(QDataStream &s, const QRegion &r)

Écrit la région r dans le flux s et renvoie une référence au flux.

Voir également Format des opérateurs QDataStream.

QDataStream &operator>>(QDataStream &s, QRegion &r)

Lit une région du flux s dans r et renvoie une référence au flux.

Voir également le format des opérateurs QDataStream.

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