QSplitter Class
La classe QSplitter implémente un widget « splitter ». En savoir plus...
| En-tête : | #include <QSplitter> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake : | QT += widgets |
| Hérite de : | QFrame |
Propriétés
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
Fonctions publiques
| QSplitter(QWidget *parent = nullptr) | |
| QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr) | |
| virtual | ~QSplitter() |
| void | addWidget(QWidget *widget) |
| bool | childrenCollapsible() const |
| int | count() const |
| void | getRange(int index, int *min, int *max) const |
| QSplitterHandle * | handle(int index) const |
| int | handleWidth() const |
| int | indexOf(QWidget *widget) const |
| void | insertWidget(int index, QWidget *widget) |
| bool | isCollapsible(int index) const |
| bool | opaqueResize() const |
| Qt::Orientation | orientation() const |
| void | refresh() |
| QWidget * | replaceWidget(int index, QWidget *widget) |
| bool | restoreState(const QByteArray &state) |
| QByteArray | saveState() const |
| void | setChildrenCollapsible(bool) |
| void | setCollapsible(int index, bool collapse) |
| void | setHandleWidth(int) |
| void | setOpaqueResize(bool opaque = true) |
| void | setOrientation(Qt::Orientation) |
| void | setSizes(const QList<int> &list) |
| void | setStretchFactor(int index, int stretch) |
| QList<int> | sizes() const |
| QWidget * | widget(int index) const |
Fonctions publiques réimplémentées
| virtual QSize | minimumSizeHint() const override |
| virtual QSize | sizeHint() const override |
Signaux
| void | splitterMoved(int pos, int index) |
Fonctions protégées
| int | closestLegalPosition(int pos, int index) |
| virtual QSplitterHandle * | createHandle() |
| void | moveSplitter(int pos, int index) |
| void | setRubberBand(int pos) |
Fonctions protégées réimplémentées
| virtual void | changeEvent(QEvent *ev) override |
| virtual void | childEvent(QChildEvent *c) override |
| virtual bool | event(QEvent *e) override |
| virtual void | resizeEvent(QResizeEvent *) override |
Description détaillée
Un séparateur permet à l'utilisateur de contrôler la taille des widgets enfants en faisant glisser la frontière qui les sépare. Un seul séparateur peut contrôler un nombre illimité de widgets. L'utilisation typique d'un QSplitter consiste à créer plusieurs widgets et à les ajouter à l'aide de insertWidget() ou addWidget().
L'exemple suivant présente côte à côte un ` QListView`, un ` QTreeView` et un ` QTextEdit `, avec deux poignées de séparateur :
QSplitter *splitter = new QSplitter(parent);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit);Si un widget se trouve déjà à l’intérieur d’un QSplitter lorsque insertWidget() ou addWidget() est appelé, il se déplacera vers la nouvelle position. Cela peut être utilisé pour réorganiser les widgets dans le séparateur ultérieurement. Vous pouvez utiliser indexOf(), widget() et count() pour accéder aux widgets situés à l’intérieur du séparateur.
Par défaut, un QSplitter dispose ses enfants horizontalement (côte à côte) ; vous pouvez utiliser setOrientation(Qt::Vertical) pour les disposer verticalement.
Par défaut, la taille de tous les widgets peut être ajustée à la convenance de l'utilisateur, entre les valeurs de minimumSizeHint() (ou minimumSize()) et maximumSize() des widgets.
Par défaut, QSplitter redimensionne ses enfants de manière dynamique. Si vous préférez que QSplitter ne redimensionne les enfants qu’à la fin d’une opération de redimensionnement, appelez setOpaqueResize(false).
La répartition initiale de la taille entre les widgets est déterminée en multipliant la taille initiale par le facteur d'étirement. Vous pouvez également utiliser setSizes() pour définir les tailles de tous les widgets. La fonction sizes() renvoie les tailles définies par l’utilisateur. Vous pouvez également enregistrer et restaurer les tailles des widgets à partir d’un fichier QByteArray à l’aide de saveState() et restoreState() respectivement.
Lorsque vous appelez la fonction ` hide()` sur un enfant, l’espace qu’il occupait est réparti entre les autres enfants. Il est rétabli lorsque vous appelez à nouveau ` show()` sur cet enfant.
Remarque : l’ajout d’un QLayout à un QSplitter n’est pas pris en charge (que ce soit via setLayout() ou en faisant du QSplitter le parent de l’ QLayout) ; utilisez plutôt addWidget() (voir l’exemple ci-dessus).
Considérations de sécurité
La fonction restoreState() désérialise un blob binaire versionné qui décrit les tailles et l’orientation des enfants du splitter. Le nombre magique et la version du format sont validés, mais les champs individuels ne font l’objet d’aucun autre contrôle de cohérence une fois que la structure externe a été acceptée.
Ne transmettez à ` restoreState()` qu’un ` QByteArray ` qui a été préalablement généré par ` saveState()` et persisté par la même version, ou une version compatible, de votre application, généralement via ` QSettings`. N’appelez pas ` restoreState()` avec des données d’origine inconnue ou non fiable, telles qu’un fichier téléchargé depuis le réseau, un fichier de configuration synchronisé ou partagé, ou des données fournies par une autre application potentiellement compromise.
Voir également QSplitterHandle, QHBoxLayout, QVBoxLayout et QTabWidget.
Documentation sur les propriétés
childrenCollapsible : bool
Cette propriété indique si l'utilisateur peut réduire la taille des widgets enfants jusqu'à 0
Par défaut, les widgets enfants sont repliables. Il est possible d'activer ou de désactiver le repliement de chaque widget enfant à l'aide de la méthode setCollapsible().
Fonctions d'accès :
| bool | childrenCollapsible() const |
| void | setChildrenCollapsible(bool) |
Voir également setCollapsible().
handleWidth : int
Cette propriété contient la largeur des poignées du séparateur
Par défaut, cette propriété contient une valeur qui dépend de la plateforme de l'utilisateur et de ses préférences de style.
Si vous définissez handleWidth sur 1 ou 0, la zone de saisie effective s'étendra de manière à chevaucher de quelques pixels les widgets correspondants.
Fonctions d'accès :
| int | handleWidth() const |
| void | setHandleWidth(int) |
opaqueResize : bool
Renvoie « true » si les widgets sont redimensionnés de manière dynamique (opaque) lors du déplacement interactif du séparateur. Sinon, renvoie « false ».
Le comportement par défaut en matière de redimensionnement dépend du style (déterminé par l’indicateur de style SH_Splitter_OpaqueResize). Vous pouvez toutefois le remplacer en appelant la fonction setOpaqueResize()
Fonctions d'accès :
| bool | opaqueResize() const |
| void | setOpaqueResize(bool opaque = true) |
Voir également QStyle::StyleHint.
orientation : Qt::Orientation
Cette propriété définit l'orientation du séparateur
Par défaut, l'orientation est horizontale (c'est-à-dire que les widgets sont disposés côte à côte). Les orientations possibles sont Qt::Horizontal et Qt::Vertical.
Fonctions d'accès :
| Qt::Orientation | orientation() const |
| void | setOrientation(Qt::Orientation) |
Voir également QSplitterHandle::orientation().
Documentation des fonctions membres
[explicit] QSplitter::QSplitter(QWidget *parent = nullptr)
Crée un séparateur horizontal en transmettant l'argument « parent » au constructeur « QFrame ».
Voir aussi setOrientation().
[explicit] QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
Crée un séparateur à partir des éléments orientation et parent fournis.
Voir aussi setOrientation().
[virtual noexcept] QSplitter::~QSplitter()
Supprime le séparateur. Tous les éléments enfants sont supprimés.
void QSplitter::addWidget(QWidget *widget)
Ajoute l'widget on indiquée à la mise en page du séparateur, après tous les autres éléments.
Si l'widget est déjà présent dans le séparateur, il sera déplacé vers la nouvelle position.
Remarque : le séparateur prend possession du widget.
Voir également insertWidget(), widget() et indexOf().
[override virtual protected] void QSplitter::changeEvent(QEvent *ev)
Réimplémente : QFrame::changeEvent(QEvent *ev).
[override virtual protected] void QSplitter::childEvent(QChildEvent *c)
Réimplémente : QObject::childEvent(QChildEvent *event).
Indique au séparateur que le widget enfant décrit par c a été inséré ou supprimé.
Cette méthode est également utilisée pour gérer le cas où un widget est créé avec le séparateur comme parent, mais n’est pas explicitement ajouté via insertWidget() ou addWidget(). Cette fonctionnalité est fournie à des fins de compatibilité et ne constitue pas la méthode recommandée pour insérer des widgets dans un séparateur dans le nouveau code. Veuillez utiliser insertWidget() ou addWidget() dans le nouveau code.
Voir également addWidget() et insertWidget().
[protected] int QSplitter::closestLegalPosition(int pos, int index)
Renvoie la position légale la plus proche de pos pour le widget disponible à l'adresse index.
Pour les langues s'écrivant de droite à gauche, telles que l'arabe et l'hébreu, la disposition des séparateurs horizontaux est inversée. Les positions sont alors mesurées à partir du bord droit du widget.
Voir également getRange().
int QSplitter::count() const
Renvoie le nombre de widgets contenus dans la disposition du séparateur.
Voir également widget() et handle().
[virtual protected] QSplitterHandle *QSplitter::createHandle()
Renvoie un nouveau curseur de séparateur en tant que widget enfant de ce séparateur. Cette fonction peut être réimplémentée dans les sous-classes afin de prendre en charge des curseurs personnalisés.
Voir également handle() et indexOf().
[override virtual protected] bool QSplitter::event(QEvent *e)
Réimplémente : QFrame::event(QEvent *e).
void QSplitter::getRange(int index, int *min, int *max) const
Renvoie la plage valide du séparateur à l'adresse index dans *min et *max si min et max ne sont pas égaux à 0.
QSplitterHandle *QSplitter::handle(int index) const
Renvoie la poignée située à gauche (ou au-dessus) de l'élément dans la disposition du séparateur à l'index indiquée, ou nullptr s'il n'existe aucun élément de ce type. La poignée à l'index 0 est toujours masquée.
Pour les langues s’écrivant de droite à gauche, telles que l’arabe et l’hébreu, la disposition des séparateurs horizontaux est inversée. La poignée se trouvera à droite du widget à l’adresse index.
Voir également count(), widget(), indexOf(), createHandle() et setHandleWidth().
int QSplitter::indexOf(QWidget *widget) const
Renvoie l'index de l'widget spécifié dans la disposition du splitter, ou -1 si widget n'est pas trouvé. Cela fonctionne également pour les handles.
Les identifiants sont numérotés à partir de 0. Il y a autant d’identifiants que de widgets enfants, mais l’identifiant à la position 0 est toujours masqué.
Voir également count() et widget().
void QSplitter::insertWidget(int index, QWidget *widget)
Insère l'élément « widget » spécifié dans la mise en page du séparateur, à l'index indiquée.
Si widget se trouve déjà dans le séparateur, il sera déplacé vers la nouvelle position.
Si l’ index est un index invalide, le widget sera alors inséré à la fin.
Remarque : le séparateur prend possession du widget.
Voir également addWidget(), indexOf() et widget().
bool QSplitter::isCollapsible(int index) const
Renvoie « true » si le widget accessible à l'adresse index est repliable ; sinon, renvoie « false ».
[override virtual] QSize QSplitter::minimumSizeHint() const
Réimplémente une fonction d'accès pour la propriété : QWidget::minimumSizeHint.
[protected] void QSplitter::moveSplitter(int pos, int index)
Déplace le bord gauche ou supérieur de la poignée de séparation située à l'adresse index aussi près que possible de la position pos, qui correspond à la distance par rapport au bord gauche ou supérieur du widget.
Pour les langues s’écrivant de droite à gauche, telles que l’arabe et l’hébreu, la disposition des séparateurs horizontaux est inversée. pos correspond alors à la distance par rapport au bord droit du widget.
Voir également splitterMoved(), closestLegalPosition() et getRange().
void QSplitter::refresh()
Met à jour l'état du séparateur. Vous ne devriez pas avoir besoin d'appeler cette fonction.
QWidget *QSplitter::replaceWidget(int index, QWidget *widget)
Remplace le widget présent dans la disposition du séparateur à l'index indiquée par widget.
Renvoie le widget qui vient d’être remplacé si l’ index est valide et si widget n’est pas déjà un enfant du séparateur. Sinon, il renvoie null et aucun remplacement ni ajout n’est effectué.
La géométrie du widget nouvellement inséré sera identique à celle du widget qu’il remplace. Ses états « visible » et « replié » sont également hérités.
Remarque : le séparateur prend possession de ` widget ` et définit le parent du widget remplacé sur `null`.
Remarque : comme la méthode ` widget ` transmet ` reparented ` au séparateur, la propriété ` geometry ` n’est pas nécessairement définie immédiatement, mais seulement après que ` widget ` a reçu les événements appropriés.
Voir également insertWidget() et indexOf().
[override virtual protected] void QSplitter::resizeEvent(QResizeEvent *)
Réimplémente : QWidget::resizeEvent(QResizeEvent *event).
bool QSplitter::restoreState(const QByteArray &state)
Rétablit la disposition du séparateur selon l'state spécifiée. Renvoie true si l'état est rétabli ; sinon, renvoie false.
En général, cette méthode est utilisée conjointement avec ` QSettings ` pour rétablir la taille d’une session précédente. Voici un exemple :
Restaurer l’état du séparateur :
QSettings settings;
splitter->restoreState(settings.value("splitterSizes").toByteArray());L'échec de la restauration de la disposition du séparateur peut résulter de données non valides ou obsolètes dans le tableau d'octets fourni.
Voir également saveState().
QByteArray QSplitter::saveState() const
Enregistre l'état de la disposition du diviseur.
En général, cette fonction est utilisée conjointement avec ` QSettings ` pour mémoriser la taille en vue d'une session ultérieure. Un numéro de version est stocké avec les données. Voici un exemple :
QSettings settings;
settings.setValue("splitterSizes", splitter->saveState());Voir également restoreState().
void QSplitter::setCollapsible(int index, bool collapse)
Détermine si le widget enfant situé à l'adresse index peut être réduit à collapse.
Par défaut, les widgets enfants sont repliables, ce qui signifie que l'utilisateur peut réduire leur taille jusqu'à 0, même s'ils ont une valeur non nulle pour minimumSize() ou minimumSizeHint(). Ce comportement peut être modifié au cas par cas pour chaque widget en appelant cette fonction, ou de manière globale pour tous les widgets du séparateur en définissant la propriété childrenCollapsible.
Voir également isCollapsible() et childrenCollapsible.
[protected] void QSplitter::setRubberBand(int pos)
Affiche un élastique à la position pos. Si pos est négative, l'élastique est supprimé.
void QSplitter::setSizes(const QList<int> &list)
Définit les tailles respectives des widgets enfants sur les valeurs indiquées dans la propriété « list ».
Si le séparateur est horizontal, ces valeurs définissent la largeur de chaque widget en pixels, de gauche à droite. Si le séparateur est vertical, elles définissent la hauteur de chaque widget, de haut en bas.
Les valeurs supplémentaires présentes dans l’ list sont ignorées. Si l’ list contient trop peu de valeurs, le résultat est indéfini, mais le programme continuera de fonctionner correctement.
La taille globale du widget séparateur n’est pas affectée. À la place, tout espace supplémentaire ou manquant est réparti entre les widgets en fonction du poids relatif de leurs tailles.
Si vous spécifiez une taille égale à 0, le widget sera invisible. Les règles de taille des widgets sont conservées. Autrement dit, une valeur inférieure à la taille minimale indiquée pour le widget concerné sera remplacée par la valeur de cette indication.
Voir également sizes().
void QSplitter::setStretchFactor(int index, int stretch)
Mise à jour de la politique de dimensionnement du widget situé à la position index pour lui attribuer un facteur d'étirement de stretch.
stretch Ce n'est pas le facteur d'étirement effectif ; celui-ci est calculé en multipliant la taille initiale du widget par stretch.
Cette fonction est fournie à titre de commodité. Elle équivaut à
QWidget *widget = splitter->widget(index);
QSizePolicy policy = widget->sizePolicy();
policy.setHorizontalStretch(stretch);
policy.setVerticalStretch(stretch);
widget->setSizePolicy(policy);Voir également setSizes() et widget().
[override virtual] QSize QSplitter::sizeHint() const
Réimplémente : QFrame::sizeHint() const.
QList<int> QSplitter::sizes() const
Renvoie une liste des paramètres de taille de tous les widgets de ce séparateur.
Si l'orientation du séparateur est horizontale, la liste contient la largeur des widgets en pixels, de gauche à droite ; si l'orientation est verticale, la liste contient la hauteur des widgets en pixels, de haut en bas.
En transmettant ces valeurs à la fonction ` setSizes()` d’un autre splitter, on obtiendra un splitter présentant la même disposition que celui-ci.
Notez que les widgets invisibles ont une taille de 0.
Voir également setSizes().
[signal] void QSplitter::splitterMoved(int pos, int index)
Ce signal est émis lorsque la poignée du séparateur située à l'index a été déplacée vers la position pos.
Pour les langues s'écrivant de droite à gauche, telles que l'arabe et l'hébreu, la disposition des séparateurs horizontaux est inversée. pos correspond alors à la distance par rapport au bord droit du widget.
Voir également moveSplitter().
QWidget *QSplitter::widget(int index) const
Renvoie le widget situé à l'index indiquée dans la mise en page du séparateur, ou nullptr s'il n'existe aucun widget à cette .
Voir également count(), handle(), indexOf() et insertWidget().
© 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.