Sur cette page

QRegion Class

La classe QRegion spécifie une région d'écrêtage pour un peintre. Plus d'informations...

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 est utilisé avec QPainter::setClipRegion() pour limiter la zone de peinture à ce qui doit être peint. Il existe également une fonction QWidget::repaint() qui prend un paramètre QRegion. QRegion est le meilleur outil pour minimiser la surface de l'écran qui doit être mise à jour par une nouvelle peinture.

Cette classe n'est pas adaptée à la construction de formes pour le rendu, en particulier pour les 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'une image bitmap. Des régions complexes peuvent être créées en combinant des régions simples à l'aide de united(), intersected(), subtracted() ou xored() (exclusif ou). Vous pouvez déplacer une région à l'aide de translate().

Vous pouvez tester si une région isEmpty() ou si elle contains() a QPoint ou QRect. Le rectangle de délimitation peut être trouvé avec boundingRect().

L'itération sur la région (avec begin(), end(), ou les boucles ranged-for) donne 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

Spécifie la forme de la région à créer.

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

QRegion::const_iterator

Un itérateur sur les rectangles qui ne se chevauchent pas et qui constituent la région.

L'union de tous les rectangles est égale à la région originale.

QRegion ne propose pas d'itérateurs mutables.

Voir aussi begin() et end().

QRegion::const_reverse_iterator

Un itérateur inversé sur les rectangles qui ne se chevauchent pas et qui constituent la région.

L'union de tous les rectangles est égale à la région originale.

QRegion ne propose pas d'itérateurs mutables.

Voir aussi rbegin() et rend().

Documentation des fonctions membres

QRegion::QRegion()

Construit une région vide.

Voir aussi isEmpty().

QRegion::QRegion(const QBitmap &bm)

Construit une région à partir de l'image bitmap bm.

La région résultante 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 la peinture lorsqu'il sera utilisé. Notez que le dessin de pixmaps masqués peut être effectué beaucoup plus rapidement en utilisant QPixmap::setMask().

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

Construit une région polygonale à partir du tableau de points a avec 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 d'enroulement ; si c'est Qt::OddEvenFill, l'algorithme de remplissage pair-impair est utilisé.

Attention : Ce constructeur peut être utilisé pour créer des régions complexes qui ralentiront la peinture lorsqu'elles seront utilisées.

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

Construit une région rectangulaire ou elliptique.

Si t est Rectangle, la région est le rectangle rempli (x, y, w, h). Si t est Ellipse, la région est l'ellipse remplie dont le centre est (x + w / 2, y + h / 2) et la taille (w,h).

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

Créer une région basée sur le 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 aussi QRegion::RegionType.

QRegion::QRegion(const QRegion &r)

Construit une nouvelle région qui est égale à la région r.

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

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

Voir aussi isNull().

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

Renvoie une adresse const_iterator pointant vers le début de la plage de rectangles qui ne se chevauchent pas et qui constituent la région.

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

Voir aussi rbegin(), cbegin() et end().

[noexcept] QRect QRegion::boundingRect() const

Renvoie le rectangle de délimitation de cette région. Une région vide donne un rectangle qui est 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 chevauche 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 une adresse const_iterator pointant vers l'une des extrémités des rectangles qui ne se chevauchent pas et qui constituent la région.

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

Voir aussi rend(), cend() et begin().

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

Retourne un QRegion qui est équivalent au hrgn donné.

Cette fonction a été introduite dans Qt 6.0.

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

Renvoie une région qui est l'intersection de cette région et de l'adresse rect.

Voir aussi subtracted(), united(), et xored().

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

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

Région Intersection

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

Voir aussi subtracted(), united() et xored().

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

Renvoie true si cette région croise rect, sinon renvoie false.

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

Renvoie true si cette région croise 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 une adresse const_reverse_iterator pointant vers le début de la plage de rectangles qui ne se chevauchent pas et qui constituent la région.

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

Voir aussi begin(), crbegin() et rend().

[noexcept] int QRegion::rectCount() const

Renvoie le nombre de rectangles dont cette région est composée. Identique à end() - begin().

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

Renvoie une plage de rectangles ne se chevauchant pas qui composent la région. L'étendue reste valide jusqu'au prochain appel d'une méthode de mutation (non-const) sur cette région.

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

Remarque : cette fonction existait également dans Qt 5, mais renvoyait QVector<QRect> à la place.

Cette fonction a été introduite dans Qt 6.8.

Voir aussi setRects().

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

Renvoie une adresse const_reverse_iterator pointant vers une extrémité de la plage de rectangles ne se chevauchant pas qui composent la région.

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

Voir aussi end(), crend() et rbegin().

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

Définit la région en utilisant le tableau de rectangles spécifié par rects. Les rectangles doivent être triés de manière optimale Y-X et respecter les restrictions suivantes :

  • Les rectangles ne doivent pas se croiser.
  • Tous les rectangles ayant une coordonnée supérieure donnée doivent avoir la même hauteur.
  • Deux rectangles ne peuvent pas se toucher horizontalement (dans ce cas, ils doivent être combiné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 aussi rects().

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

Renvoie une région qui est r soustraite de cette région.

Soustraction de régions

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

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

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

Remplace cette région par other. Cette opération est très rapide et n'échoue jamais.

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

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

Cette fonction a été introduite dans Qt 6.0.

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

Traduit (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)

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

Traduit la région vers la valeur donnée point.

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

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

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

Voir également translate().

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

Renvoie une copie du rectangle qui a été translaté p.x() le long de l'axe des x et p.y() le long de l'axe des y, par rapport à la position actuelle. Les valeurs positives déplacent le rectangle vers la droite et 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 est l'union de cette région et de la région donnée rect.

Voir aussi intersected(), subtracted(), et xored().

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

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

Région Union

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

Voir aussi intersected(), subtracted() et xored().

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

Renvoie une région qui est le ou exclusif (XOR) de cette région et de r.

Région XORed

La figure montre le OU exclusif de deux régions elliptiques.

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

QRegion::operator QVariant() const

Retourne la région sous forme de 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 est équivalent à r1.intersected(r2).

Voir aussi 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 et affecte le résultat à cette région. r1&=r2 est équivalent à r1 = r1.intersected(r2).

Voir aussi 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 est équivalent à r1.united(r2).

Voir aussi 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 est l'union de cette région avec la région spécifiée rect.

Voir aussi united().

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

Applique la fonction united() à cette région et à r et affecte le résultat à cette région. r1+=r2 est équivalent à r1 = r1.united(r2).

Voir aussi intersected().

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

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

Voir aussi subtracted().

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

Applique la fonction subtracted() à cette région et à r et affecte le résultat à cette région. r1-=r2 est équivalent à r1 = r1.subtracted(r2).

Voir aussi subtracted().

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

Move-assigne other à cette instance QRegion.

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

Attribue r à cette région et renvoie une référence à la région.

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 est équivalent à r1.xored(r2).

Voir aussi xored().

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

Applique la fonction xored() à cette région et à r et affecte le résultat à cette région. r1^=r2 est équivalent à r1 = r1.xored(r2).

Voir aussi xored().

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

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

Voir aussi united() et operator+().

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

Applique la fonction united() à cette région et à r et affecte le résultat à cette région. r1|=r2 est équivalent à r1 = r1.united(r2).

Voir également united().

Non-membres apparenté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 aussi 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 aussi 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.