Sur cette page

QRubberBand Class

La classe QRubberBand fournit un rectangle ou une ligne qui peut indiquer une sélection ou une limite. Plus d'informations...

En-tête : #include <QRubberBand>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Héritages : QWidget

Types publics

enum Shape { Line, Rectangle }

Fonctions publiques

QRubberBand(QRubberBand::Shape s, QWidget *p = nullptr)
virtual ~QRubberBand()
void move(int x, int y)
void move(const QPoint &p)
void resize(int width, int height)
void resize(const QSize &size)
void setGeometry(const QRect &rect)
void setGeometry(int x, int y, int width, int height)
QRubberBand::Shape shape() const

Fonctions protégées

virtual void initStyleOption(QStyleOptionRubberBand *option) const

Fonctions protégées réimplémentées

virtual void changeEvent(QEvent *e) override
virtual bool event(QEvent *e) override
virtual void moveEvent(QMoveEvent *) override
virtual void paintEvent(QPaintEvent *) override
virtual void resizeEvent(QResizeEvent *) override
virtual void showEvent(QShowEvent *e) override

Description détaillée

Un élastique est souvent utilisé pour montrer une nouvelle zone de délimitation (comme dans un QSplitter ou un QDockWidget qui se désancre). Historiquement, cela a été mis en œuvre en utilisant QPainter et XOR, mais cette approche ne fonctionne pas toujours correctement car le rendu peut se produire dans la fenêtre en dessous de l'élastique, mais avant que l'élastique n'ait été "effacé".

Vous pouvez créer un QRubberBand chaque fois que vous avez besoin de rendre un élastique autour d'une zone donnée (ou pour représenter une seule ligne), puis appeler setGeometry(), move() ou resize() pour le positionner et le dimensionner. Il est courant de faire cela en conjonction avec les événements de la souris. Par exemple :

void Widget::mousePressEvent(QMouseEvent *event)
{
    origin = event->pos();
    if (!rubberBand)
        rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
    rubberBand->setGeometry(QRect(origin, QSize()));
    rubberBand->show();
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    rubberBand->setGeometry(QRect(origin, event->pos()).normalized());
}

void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    rubberBand->hide();
    // determine selection, for example using QRect::intersects()
    // and QRect::contains().
}

Si vous transmettez un parent au constructeur de QRubberBand, l'élastique ne s'affichera qu'à l'intérieur de son parent, mais restera au-dessus des autres widgets enfants. Si aucun parent n'est transmis, QRubberBand agira comme un widget de niveau supérieur.

Appelez show() pour rendre l'élastique visible ; également lorsque l'élastique n'est pas un widget de niveau supérieur. Le fait de cacher ou de détruire le widget fera disparaître l'élastique. L'élastique peut être un Rectangle ou un Line (vertical ou horizontal), en fonction de la commande shape() qui lui a été attribuée lors de sa construction.

Documentation sur les types de membres

enum QRubberBand::Shape

Cette énumération spécifie la forme que doit avoir un QRubberBand. Il s'agit d'un indice de dessin qui est transmis au système de style et qui peut être interprété par chaque QStyle.

ConstanteValeurDescription
QRubberBand::Line0Un QRubberBand peut représenter une ligne verticale ou horizontale. La géométrie est toujours donnée dans rect() et la ligne remplira la géométrie donnée dans la plupart des styles.
QRubberBand::Rectangle1Un QRubberBand peut représenter un rectangle. Certains styles l'interpréteront comme un rectangle rempli (souvent semi-transparent) ou un contour rectangulaire.

Documentation des fonctions membres

[explicit] QRubberBand::QRubberBand(QRubberBand::Shape s, QWidget *p = nullptr)

Construit un élastique de la forme s, avec le parent p.

Par défaut, un élastique rectangulaire (s est Rectangle) utilise un masque, de sorte qu'une petite bordure du rectangle est tout ce qui est visible. Certains styles (par exemple, macOS natif) changeront cela et appelleront QWidget::setWindowOpacity() pour créer un rectangle de sélection rempli semi-transparent.

[virtual noexcept] QRubberBand::~QRubberBand()

Destructeur.

[override virtual protected] void QRubberBand::changeEvent(QEvent *e)

Réimplémente : QWidget::changeEvent(QEvent *event).

[override virtual protected] bool QRubberBand::event(QEvent *e)

Réimplémente : QWidget::event(QEvent *event).

[virtual protected] void QRubberBand::initStyleOption(QStyleOptionRubberBand *option) const

Initialiser option avec les valeurs de QRubberBand. Cette méthode est utile pour les sous-classes qui ont besoin d'un QStyleOptionRubberBand, mais qui ne veulent pas remplir toutes les informations elles-mêmes.

Voir aussi QStyleOption::initFrom().

void QRubberBand::move(int x, int y)

Déplace l'élastique au point (x, y).

Voir également resize().

void QRubberBand::move(const QPoint &p)

Déplace l'élastique au point p.

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

Voir également resize().

[override virtual protected] void QRubberBand::moveEvent(QMoveEvent *)

Réimplémente : QWidget::moveEvent(QMoveEvent *event).

[override virtual protected] void QRubberBand::paintEvent(QPaintEvent *)

Réimplémente : QWidget::paintEvent(QPaintEvent *event).

void QRubberBand::resize(int width, int height)

Redimensionne l'élastique de manière à ce que sa largeur soit de width, et sa hauteur de height.

Voir aussi move().

void QRubberBand::resize(const QSize &size)

Redimensionne l'élastique de manière à ce que sa nouvelle taille soit size.

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

Voir également move().

[override virtual protected] void QRubberBand::resizeEvent(QResizeEvent *)

Réimplémente : QWidget::resizeEvent(QResizeEvent *event).

void QRubberBand::setGeometry(const QRect &rect)

Définit la géométrie de l'élastique à rect, spécifiée dans le système de coordonnées de son widget parent.

Voir également QWidget::geometry.

void QRubberBand::setGeometry(int x, int y, int width, int height)

Définit la géométrie de l'élastique comme étant le rectangle dont le coin supérieur gauche se trouve au point (x, y), et dont les dimensions sont spécifiées par width et height. La géométrie est spécifiée dans le système de coordonnées du widget parent.

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

QRubberBand::Shape QRubberBand::shape() const

Renvoie la forme de cet élastique. La forme ne peut être définie qu'au moment de la construction.

[override virtual protected] void QRubberBand::showEvent(QShowEvent *e)

Réimplémente : QWidget::showEvent(QShowEvent *event).

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