Sur cette page

QMdiSubWindow Class

La classe QMdiSubWindow fournit une classe de sous-fenêtre pour QMdiArea. Plus...

En-tête : #include <QMdiSubWindow>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Héritages : 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

Emplacements 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 un site QMdiArea, et se compose d'une barre de titre avec des décorations de fenêtre, d'un widget interne et (en fonction du style actuel) d'un cadre de fenêtre et d'une poignée de taille. QMdiSubWindow a sa propre disposition, qui consiste en une barre de titre et une zone centrale pour le widget interne.

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

La manière la plus courante de construire une QMdiSubWindow est d'appeler QMdiArea::addSubWindow() avec le widget interne comme argument. Vous pouvez également créer une sous-fenêtre vous-même et définir un widget interne en appelant setWidget().

Pour programmer avec les sous-fenêtres, vous utilisez la même API que pour les fenêtres de niveau supérieur (par exemple, vous pouvez appeler des fonctions telles que show(), hide(), showMaximized() et setWindowTitle()).

Gestion des sous-fenêtres

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

Par défaut, chaque QMdiSubWindow est visible à l'intérieur de la fenêtre de la zone MDI lorsqu'elle est déplacée, mais il est également possible de spécifier un comportement transparent de déplacement et de redimensionnement de la fenêtre, où seul le contour d'une sous-fenêtre est mis à jour au cours 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 ombrée (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 a changé (par exemple, lorsque la fenêtre est réduite ou restaurée). Il émet également le signal aboutToActivate() avant d'être activé.

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

Vous pouvez également modifier la fenêtre active à l'aide du clavier. En appuyant simultanément sur les touches contrôle et tabulation, la sous-fenêtre suivante (en utilisant le site WindowOrder) est activée. En appuyant sur les touches control, shift et tab, vous activerez la fenêtre précédente. Cela équivaut à appeler activateNextSubWindow() et activatePreviousSubWindow(). Notez que ces raccourcis remplacent les raccourcis globaux, mais pas les raccourcis de QMdiArea.

Voir également QMdiArea.

Documentation sur les types de membres

enum QMdiSubWindow::SubWindowOption
flags QMdiSubWindow::SubWindowOptions

Cette énumération décrit les options qui personnalisent le comportement de QMdiSubWindow.

ConstanteValeurDescription de l'option
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 le redimensionne au lieu de 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 reçoit un simple QResizeEvent. Cette option est désactivée par défaut.
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 le déplace au lieu de la sous-fenêtre elle-même. Par conséquent, la sous-fenêtre reste dans sa position d'origine jusqu'à ce que l'opération de déplacement soit terminée, moment auquel une adresse QMoveEvent est envoyée à 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 à laquelle un widget doit se déplacer ou se redimensionner lorsque l'on utilise les touches de page du clavier.

En mode interactif, 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. La façon la plus courante d'entrer dans le mode interactif au clavier est 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 de page du clavier est de 20 pixels.

Fonctions d'accès :

int keyboardPageStep() const
void setKeyboardPageStep(int step)

Voir également keyboardSingleStep.

keyboardSingleStep : int

définit la distance à laquelle un widget doit se déplacer ou se redimensionner lorsque l'on utilise les touches fléchées du clavier.

En mode clavier interactif, 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 fléchées. La façon la plus courante d'entrer dans le mode interactif au clavier est d'accéder au menu de la sous-fenêtre et de sélectionner "redimensionner" ou "déplacer".

La valeur par défaut de l'étape unique du clavier est de 5 pixels.

Fonctions d'accès :

int keyboardSingleStep() const
void setKeyboardSingleStep(int step)

Voir également keyboardPageStep.

Documentation sur les fonctions membres

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

Construit 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 setParent() lorsque vous ajoutez la sous-fenêtre à une QMdiArea.

Notez que seuls les QMdiSubWindowpeuvent être définis comme enfants de QMdiArea; vous ne pouvez pas, par exemple, écrire :

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

Voir aussi QMdiArea::addSubWindow().

[virtual noexcept] QMdiSubWindow::~QMdiSubWindow()

Détruit la sous-fenêtre.

Voir également QMdiArea::removeSubWindow().

[signal] void QMdiSubWindow::aboutToActivate()

QMdiSubWindow émet ce signal immédiatement avant d'être activée. Une fois la sous-fenêtre activée, le site QMdiArea qui gère la sous-fenêtre émet é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 ombrée ; sinon, renvoie false.

Une fenêtre est ombrée si elle est réduite de manière à ce 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 également QMdiArea::addSubWindow().

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

Réimplémente une fonction d'accès à 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).

Attention : Lors de la maximisation ou de la restauration d'une sous-fenêtre, l'appel à cette fonction peut avoir un QResizeEvent::oldSize() invalide.

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

Si on est vrai, option est activé sur la sous-fenêtre ; sinon, il est désactivé. Voir SubWindowOption pour connaître l'effet de chaque option.

Voir également SubWindowOption et testOption().

void QMdiSubWindow::setSystemMenu(QMenu *systemMenu)

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

Par défaut, chaque site QMdiSubWindow dispose d'un menu système standard.

Les actions Q 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 minimisation sera désactivée lorsque la fenêtre sera réduite.

Les actions ajoutées par l'utilisateur ne sont pas mises à jour par QMdiSubWindow.

QMdiSubWindow prend possession de systemMenu; vous ne devez pas l'effacer. 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 est affiché au centre de la sous-fenêtre, sous la barre de titre.

QMdiSubWindow prend temporairement possession de widget; vous n'avez pas à le supprimer. Tout widget interne existant sera supprimé et renvoyé à la fenêtre racine.

Voir aussi 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 l'ombrage ne soit pas pris en charge par tous les styles, cette fonction affichera toujours la sous-fenêtre comme ombrée, que la prise en charge de l'ombrage soit disponible ou non. Toutefois, lorsqu'elle est utilisée avec des styles ne prenant pas en charge l'ombrage, l'utilisateur ne pourra pas revenir au mode ombré par l'intermédiaire de l'interface utilisateur (par exemple, au moyen d'un bouton d'ombrage 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 aussi setSystemMenu() et systemMenu().

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

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

QMenu *QMdiSubWindow::systemMenu() const

Renvoie un pointeur sur le menu système actuel, ou zéro si aucun menu système n'est défini. QMdiSubWindow fournit un menu système par défaut, mais vous pouvez également définir le menu avec setSystemMenu().

Voir aussi setSystemMenu() et showSystemMenu().

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

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

Voir aussi 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 après le changement d'état de la fenêtre. oldState est l'état de la fenêtre avant son changement, et newState est le 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.