Sur cette page

QMdiSubWindow Class

La classe QMdiSubWindow fournit une classe de sous-fenêtre pour QMdiArea. En savoir plus...

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

Types publics

enum SubWindowOption { RubberBandResize, RubberBandMove }
flags SubWindowOptions

Propriétés

Fonctions publiques

QMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QMdiSubWindow()
bool isShaded() const
int keyboardPageStep() const
int keyboardSingleStep() const
QMdiArea *mdiArea() const
void setKeyboardPageStep(int step)
void setKeyboardSingleStep(int step)
void setOption(QMdiSubWindow::SubWindowOption option, bool on = true)
void setSystemMenu(QMenu *systemMenu)
void setWidget(QWidget *widget)
QMenu *systemMenu() const
bool testOption(QMdiSubWindow::SubWindowOption option) const
QWidget *widget() const

Fonctions publiques réimplémentées

virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

Slots publics

void showShaded()
void showSystemMenu()

Signaux

void aboutToActivate()
void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)

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

virtual void changeEvent(QEvent *changeEvent) override
virtual void childEvent(QChildEvent *childEvent) override
virtual void closeEvent(QCloseEvent *closeEvent) override
virtual void contextMenuEvent(QContextMenuEvent *contextMenuEvent) override
virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *object, QEvent *event) override
virtual void focusInEvent(QFocusEvent *focusInEvent) override
virtual void focusOutEvent(QFocusEvent *focusOutEvent) override
virtual void hideEvent(QHideEvent *hideEvent) override
virtual void keyPressEvent(QKeyEvent *keyEvent) override
virtual void leaveEvent(QEvent *leaveEvent) override
virtual void mouseDoubleClickEvent(QMouseEvent *mouseEvent) override
virtual void mouseMoveEvent(QMouseEvent *mouseEvent) override
virtual void mousePressEvent(QMouseEvent *mouseEvent) override
virtual void mouseReleaseEvent(QMouseEvent *mouseEvent) override
virtual void moveEvent(QMoveEvent *moveEvent) override
virtual void paintEvent(QPaintEvent *paintEvent) override
virtual void resizeEvent(QResizeEvent *resizeEvent) override
virtual void showEvent(QShowEvent *showEvent) override
virtual void timerEvent(QTimerEvent *timerEvent) override

Description détaillée

QMdiSubWindow représente une fenêtre de niveau supérieur dans une QMdiArea et se compose d’une barre de titre avec des décorations de fenêtre, d’un widget interne et (selon le style actuel) d’un cadre de fenêtre et d’une poignée de redimensionnement. QMdiSubWindow possède sa propre disposition, qui se compose de la barre de titre et d’une zone centrale destinée au widget interne.

Fenêtre MDI avec une barre de titre et un widget interne

La méthode la plus courante pour créer une QMdiSubWindow consiste à appeler QMdiArea::addSubWindow() en passant le widget interne en argument. Vous pouvez également créer vous-même une sous-fenêtre et y définir un widget interne en appelant setWidget().

La programmation des sous-fenêtres s'effectue à l'aide de la même API que celle utilisée pour les fenêtres de niveau supérieur classiques (vous pouvez par exemple appeler des fonctions telles que ` show()`, ` hide()`, ` showMaximized()` et ` setWindowTitle()`).

Gestion des sous-fenêtres

QMdiSubWindow prend également en charge le comportement spécifique aux sous-fenêtres dans une zone MDI.

Par défaut, chaque QMdiSubWindow est visible dans la fenêtre d’affichage de la zone MDI lorsqu’elle est déplacée, mais il est également possible de spécifier un comportement de déplacement et de redimensionnement transparent, dans lequel seul le contour d’une sous-fenêtre est mis à jour lors de ces opérations. La fonction setOption() est utilisée pour activer ce comportement.

La fonction ` isShaded()` détecte si la sous-fenêtre est actuellement en mode « ombré » (c'est-à-dire que la fenêtre est réduite de sorte que seule la barre de titre est visible). Pour passer en mode « ombré », appelez ` showShaded()`. QMdiSubWindow émet le signal ` windowStateChanged()` chaque fois que l’état de la fenêtre change (par exemple, lorsque la fenêtre est réduite ou restaurée). Elle émet également le signal ` aboutToActivate()` avant d’être activée.

En mode interactif au clavier, les fenêtres sont déplacées et redimensionnées à l’aide du clavier. Vous pouvez accéder à ce mode via le menu système de la fenêtre. Les propriétés ` keyboardSingleStep ` et ` keyboardPageStep ` contrôlent la distance sur laquelle le widget est déplacé ou redimensionné à chaque pression de touche. Lorsque la touche Maj est enfoncée, le déplacement s’effectue par pas de page ; dans le cas contraire, il s’effectue par pas simple.

Vous pouvez également changer de fenêtre active à l’aide du clavier. En appuyant simultanément sur les touches Ctrl et Tab, la sous-fenêtre suivante (selon la valeur actuelle de ` WindowOrder`) sera activée. En appuyant sur Ctrl, Maj et Tab, vous activerez la fenêtre précédente. Cela équivaut à appeler les fonctions ` activateNextSubWindow()` et ` activatePreviousSubWindow()`. Notez que ces raccourcis remplacent les raccourcis globaux, mais pas ceux de la fonction ` QMdiArea`.

Voir également QMdiArea.

Documentation sur les types de membres

enum QMdiSubWindow::SubWindowOption
flags QMdiSubWindow::SubWindowOptions

Cette énumération décrit les options permettant de personnaliser le comportement de QMdiSubWindow.

ConstanteValeurDescription
QMdiSubWindow::RubberBandResize0x4Si vous activez cette option, un contrôle « élastique » est utilisé pour représenter le contour de la sous-fenêtre, et l’utilisateur redimensionne ce contrôle plutôt que la sous-fenêtre elle-même. Par conséquent, la sous-fenêtre conserve sa position et sa taille d’origine jusqu’à ce que l’opération de redimensionnement soit terminée, moment auquel elle recevra un seul appel à ` QResizeEvent`. Par défaut, cette option est désactivée.
QMdiSubWindow::RubberBandMove0x8Si vous activez cette option, un contrôle « élastique » est utilisé pour représenter le contour de la sous-fenêtre, et l’utilisateur déplace ce contrôle au lieu de la sous-fenêtre elle-même. Par conséquent, la sous-fenêtre reste à sa position d’origine jusqu’à ce que l’opération de déplacement soit terminée, moment auquel un message ` QMoveEvent ` est envoyé à la fenêtre. Par défaut, cette option est désactivée.

Le type `SubWindowOptions` est un `typedef` pour ` QFlags<SubWindowOption>`. Il stocke une combinaison (ou) de valeurs `SubWindowOption`.

Documentation sur les propriétés

keyboardPageStep : int

Définit la distance sur laquelle un widget doit se déplacer ou le pourcentage de redimensionnement à appliquer lors de l'utilisation des touches de page du clavier.

En mode interactif au clavier, vous pouvez utiliser les touches fléchées et les touches de page pour déplacer ou redimensionner la fenêtre. Cette propriété contrôle les touches de page. Pour passer en mode interactif au clavier, il suffit généralement d'accéder au menu de la sous-fenêtre et de sélectionner « redimensionner » ou « déplacer ».

La valeur par défaut du pas des touches de page est de 20 pixels.

Fonctions d'accès :

int keyboardPageStep() const
void setKeyboardPageStep(int step)

Voir également keyboardSingleStep.

keyboardSingleStep : int

Définit la distance sur laquelle un widget doit se déplacer ou se redimensionner lors de l'utilisation des touches fléchées du clavier.

En mode interactif au clavier, vous pouvez utiliser les touches fléchées et les touches de page pour déplacer ou redimensionner la fenêtre. Cette propriété contrôle le comportement des touches fléchées. Pour passer en mode interactif au clavier, il suffit généralement d'accéder au menu de la sous-fenêtre et de sélectionner « Redimensionner » ou « Déplacer ».

La valeur par défaut du pas par pas au clavier est de 5 pixels.

Fonctions d'accès :

int keyboardSingleStep() const
void setKeyboardSingleStep(int step)

Voir également keyboardPageStep.

Documentation des fonctions membres

QMdiSubWindow::QMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

Crée un nouveau widget QMdiSubWindow. Les arguments parent et flags sont transmis au constructeur de QWidget.

Au lieu d’utiliser addSubWindow(), il est également possible d’utiliser simplement setParent() lorsque vous ajoutez la sous-fenêtre à un QMdiArea.

Notez que seules les instances de ` QMdiSubWindow` peuvent être définies comme enfants d’un ` QMdiArea` ; vous ne pouvez pas, par exemple, écrire :

//bad code
QMdiArea mdiArea;
QTextEdit editor(&mdiArea); // invalid child widget

Voir également QMdiArea::addSubWindow().

[virtual noexcept] QMdiSubWindow::~QMdiSubWindow()

Supprime la sous-fenêtre.

Voir aussi QMdiArea::removeSubWindow().

[signal] void QMdiSubWindow::aboutToActivate()

QMdiSubWindow émet ce signal juste avant son activation. Une fois la sous-fenêtre activée, l’ QMdiArea qui la gère émettra également le signal subWindowActivated().

Voir également QMdiArea::subWindowActivated().

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

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

[override virtual protected] void QMdiSubWindow::childEvent(QChildEvent *childEvent)

Réimplémente : QObject::childEvent(QChildEvent *event).

[override virtual protected] void QMdiSubWindow::closeEvent(QCloseEvent *closeEvent)

Réimplémente : QWidget::closeEvent(QCloseEvent *event).

[override virtual protected] void QMdiSubWindow::contextMenuEvent(QContextMenuEvent *contextMenuEvent)

Réimplémente : QWidget::contextMenuEvent(QContextMenuEvent *event).

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

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

[override virtual protected] bool QMdiSubWindow::eventFilter(QObject *object, QEvent *event)

Réimplémente : QObject::eventFilter(QObject *watched, QEvent *event).

[override virtual protected] void QMdiSubWindow::focusInEvent(QFocusEvent *focusInEvent)

Réimplémente : QWidget::focusInEvent(QFocusEvent *event).

[override virtual protected] void QMdiSubWindow::focusOutEvent(QFocusEvent *focusOutEvent)

Réimplémente : QWidget::focusOutEvent(QFocusEvent *event).

[override virtual protected] void QMdiSubWindow::hideEvent(QHideEvent *hideEvent)

Réimplémente : QWidget::hideEvent(QHideEvent *event).

bool QMdiSubWindow::isShaded() const

Renvoie « true » si cette fenêtre est masquée ; sinon, renvoie « false ».

Une fenêtre est masquée si elle est réduite de telle sorte que seule la barre de titre soit visible.

[override virtual protected] void QMdiSubWindow::keyPressEvent(QKeyEvent *keyEvent)

Réimplémente : QWidget::keyPressEvent(QKeyEvent *event).

[override virtual protected] void QMdiSubWindow::leaveEvent(QEvent *leaveEvent)

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

QMdiArea *QMdiSubWindow::mdiArea() const

Renvoie la zone contenant cette sous-fenêtre, ou nullptr s'il n'y en a pas.

Voir aussi QMdiArea::addSubWindow().

[override virtual] QSize QMdiSubWindow::minimumSizeHint() const

Réimplémente une fonction d'accès pour la propriété : QWidget::minimumSizeHint.

[override virtual protected] void QMdiSubWindow::mouseDoubleClickEvent(QMouseEvent *mouseEvent)

Réimplémente : QWidget::mouseDoubleClickEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mouseMoveEvent(QMouseEvent *mouseEvent)

Réimplémente : QWidget::mouseMoveEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mousePressEvent(QMouseEvent *mouseEvent)

Réimplémente : QWidget::mousePressEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mouseReleaseEvent(QMouseEvent *mouseEvent)

Réimplémente : QWidget::mouseReleaseEvent(QMouseEvent *event).

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

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

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

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

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

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

Avertissement : lors de l'agrandissement ou du rétablissement d'une sous-fenêtre, l'appel à cette fonction qui en résulte peut recevoir un QResizeEvent::oldSize() non valide.

void QMdiSubWindow::setOption(QMdiSubWindow::SubWindowOption option, bool on = true)

Si la valeur de ` on ` est `true`, l'option ` option ` est activée dans la sous-fenêtre ; dans le cas contraire, elle est désactivée. Consultez SubWindowOption pour connaître l'effet de chaque option.

Voir également SubWindowOption et testOption().

void QMdiSubWindow::setSystemMenu(QMenu *systemMenu)

Définit « systemMenu » comme menu système actuel pour cette sous-fenêtre.

Par défaut, chaque « QMdiSubWindow » dispose d’un menu système standard.

Les QActions du menu système créé par ` QMdiSubWindow ` seront automatiquement mises à jour en fonction de l'état actuel de la fenêtre ; par exemple, l'action de réduction sera désactivée une fois la fenêtre réduite.

Les QActions ajoutées par l’utilisateur ne sont pas mises à jour par QMdiSubWindow.

QMdiSubWindow systemMenu prend possession de la fenêtre ; vous n’avez pas besoin de la supprimer. Tous les menus existants seront supprimés.

Voir également systemMenu() et showSystemMenu().

void QMdiSubWindow::setWidget(QWidget *widget)

Définit widget comme widget interne de cette sous-fenêtre. Le widget interne s'affiche au centre de la sous-fenêtre, sous la barre de titre.

QMdiSubWindow Prend temporairement possession de ` widget` ; vous n’avez pas besoin de le supprimer. Tout widget interne existant sera supprimé et rattaché à la fenêtre racine.

Voir également widget().

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

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

[slot] void QMdiSubWindow::showShaded()

L'appel de cette fonction fait passer la sous-fenêtre en mode ombré. Lorsque la sous-fenêtre est ombrée, seule la barre de titre est visible.

Bien que le masquage ne soit pas pris en charge par tous les styles, cette fonction affichera tout de même la sous-fenêtre comme masquée, que le masquage soit pris en charge ou non. Cependant, lorsqu'elle est utilisée avec des styles ne prenant pas en charge le masquage, l'utilisateur ne pourra pas quitter le mode masqué via l'interface utilisateur (par exemple, à l'aide d'un bouton de masquage dans la barre de titre).

Voir également isShaded().

[slot] void QMdiSubWindow::showSystemMenu()

Affiche le menu système sous l'icône du menu système dans la barre de titre.

Voir également setSystemMenu() et systemMenu().

[override virtual] QSize QMdiSubWindow::sizeHint() const

Réimplémente une fonction d'accès pour la propriété : QWidget::sizeHint.

QMenu *QMdiSubWindow::systemMenu() const

Renvoie un pointeur vers le menu système actuel, ou zéro si aucun menu système n'est défini. La fonction ` QMdiSubWindow ` fournit un menu système par défaut, mais vous pouvez également définir le menu à l'aide de la fonction ` setSystemMenu()`.

Voir également setSystemMenu() et showSystemMenu().

bool QMdiSubWindow::testOption(QMdiSubWindow::SubWindowOption option) const

Renvoie « true » si « option » est activé ; sinon, renvoie « false ».

Voir également SubWindowOption et setOption().

[override virtual protected] void QMdiSubWindow::timerEvent(QTimerEvent *timerEvent)

Réimplémente : ` QObject::timerEvent(QTimerEvent *event)`.

QWidget *QMdiSubWindow::widget() const

Renvoie le widget interne actuel.

Voir aussi setWidget().

[signal] void QMdiSubWindow::windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)

QMdiSubWindow émet ce signal lorsque l'état de la fenêtre change. ` oldState ` correspond à l'état de la fenêtre avant le changement, et ` newState ` correspond au nouvel état actuel.

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