QMdiArea Class
Le widget QMdiArea fournit une zone dans laquelle les fenêtres MDI sont affichées. Plus d'informations...
| En-tête : | #include <QMdiArea> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake : | QT += widgets |
| Héritages : | QAbstractScrollArea |
Types publics
| enum | AreaOption { DontMaximizeSubWindowOnActivation } |
| flags | AreaOptions |
| enum | ViewMode { SubWindowView, TabbedView } |
| enum | WindowOrder { CreationOrder, StackingOrder, ActivationHistoryOrder } |
Propriétés
|
|
Fonctions publiques
| QMdiArea(QWidget *parent = nullptr) | |
| virtual | ~QMdiArea() |
| QMdiArea::WindowOrder | activationOrder() const |
| QMdiSubWindow * | activeSubWindow() const |
| QMdiSubWindow * | addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags()) |
| QBrush | background() const |
| QMdiSubWindow * | currentSubWindow() const |
| bool | documentMode() const |
| void | removeSubWindow(QWidget *widget) |
| void | setActivationOrder(QMdiArea::WindowOrder order) |
| void | setBackground(const QBrush &background) |
| void | setDocumentMode(bool enabled) |
| void | setOption(QMdiArea::AreaOption option, bool on = true) |
| void | setTabPosition(QTabWidget::TabPosition position) |
| void | setTabShape(QTabWidget::TabShape shape) |
| void | setTabsClosable(bool closable) |
| void | setTabsMovable(bool movable) |
| void | setViewMode(QMdiArea::ViewMode mode) |
| QList<QMdiSubWindow *> | subWindowList(QMdiArea::WindowOrder order = CreationOrder) const |
| QTabWidget::TabPosition | tabPosition() const |
| QTabWidget::TabShape | tabShape() const |
| bool | tabsClosable() const |
| bool | tabsMovable() const |
| bool | testOption(QMdiArea::AreaOption option) const |
| QMdiArea::ViewMode | viewMode() const |
Fonctions publiques réimplémentées
| virtual QSize | minimumSizeHint() const override |
| virtual QSize | sizeHint() const override |
Emplacements publics
| void | activateNextSubWindow() |
| void | activatePreviousSubWindow() |
| void | cascadeSubWindows() |
| void | closeActiveSubWindow() |
| void | closeAllSubWindows() |
| void | setActiveSubWindow(QMdiSubWindow *window) |
| void | tileSubWindows() |
Signaux
| void | subWindowActivated(QMdiSubWindow *window) |
Fonctions protégées réimplémentées
| virtual void | childEvent(QChildEvent *childEvent) override |
| virtual bool | event(QEvent *event) override |
| virtual bool | eventFilter(QObject *object, QEvent *event) override |
| virtual void | paintEvent(QPaintEvent *paintEvent) override |
| virtual void | resizeEvent(QResizeEvent *resizeEvent) override |
| virtual void | scrollContentsBy(int dx, int dy) override |
| virtual void | showEvent(QShowEvent *showEvent) override |
| virtual void | timerEvent(QTimerEvent *timerEvent) override |
| virtual bool | viewportEvent(QEvent *event) override |
Emplacements protégés
| virtual void | setupViewport(QWidget *viewport) override |
Description détaillée
QMdiArea fonctionne essentiellement comme un gestionnaire de fenêtres MDI. Par exemple, il dessine les fenêtres qu'il gère sur lui-même et les dispose en cascade ou en mosaïque. QMdiArea est généralement utilisé comme widget central dans un site QMainWindow pour créer des applications MDI, mais il peut également être placé dans n'importe quelle disposition. Le code suivant ajoute une zone à une fenêtre principale :
QMainWindow *mainWindow = new QMainWindow; mainWindow->setCentralWidget(mdiArea);
Contrairement aux gestionnaires de fenêtres pour les fenêtres de niveau supérieur, tous les drapeaux de fenêtre (Qt::WindowFlags) sont pris en charge par QMdiArea tant que les drapeaux sont pris en charge par le style de widget actuel.
Les sous-fenêtres de QMdiArea sont des instances de QMdiSubWindow. Elles sont ajoutées à une zone MDI avec addSubWindow(). Il est courant de passer à cette fonction un QWidget, qui est défini comme widget interne, mais il est également possible de passer directement un QMdiSubWindow. La classe hérite de QWidget, et vous pouvez utiliser la même API qu'avec une fenêtre de premier niveau normale lors de la programmation. QMdiSubWindow a également un comportement spécifique aux fenêtres MDI. Voir la description de la classe QMdiSubWindow pour plus de détails.
Une sous-fenêtre devient active lorsqu'elle obtient le focus clavier ou lorsque setFocus() est appelé. L'utilisateur active une fenêtre en déplaçant le focus de la manière habituelle. La zone MDI émet le signal subWindowActivated() lorsque la fenêtre active change, et la fonction activeSubWindow() renvoie la sous-fenêtre active.
La fonction de commodité subWindowList() renvoie une liste de toutes les sous-fenêtres. Cette information peut être utilisée dans un menu contextuel contenant une liste de fenêtres, par exemple.
Les sous-fenêtres sont triées en fonction de l'adresse courante WindowOrder. Cette fonction est utilisée pour subWindowList() et pour activateNextSubWindow() et activatePreviousSubWindow(). Il est également utilisé lors de l'affichage en cascade ou en mosaïque des fenêtres avec cascadeSubWindows() et tileSubWindows().
QMdiArea fournit deux stratégies de mise en page intégrées pour les sous-fenêtres : cascadeSubWindows() et tileSubWindows(). Ces deux stratégies sont des fentes et sont facilement connectées aux entrées de menu.
![]() | ![]() |
Remarque : la propriété de barre de défilement par défaut de QMdiArea est Qt::ScrollBarAlwaysOff.
Voir également QMdiSubWindow.
Documentation sur les types de membres
enum QMdiArea::AreaOption
flags QMdiArea::AreaOptions
Cette énumération décrit les options qui personnalisent le comportement de QMdiArea.
| Constante | Valeur | Description de la constante |
|---|---|---|
QMdiArea::DontMaximizeSubWindowOnActivation | 0x1 | Lorsque la sous-fenêtre active est maximisée, le comportement par défaut est de maximiser la sous-fenêtre suivante qui est activée. Définissez cette option si vous ne souhaitez pas ce comportement. |
Le type AreaOptions est un typedef pour QFlags<AreaOption>. Il stocke une combinaison OU de valeurs AreaOption.
enum QMdiArea::ViewMode
Cette énumération décrit le mode d'affichage de la zone, c'est-à-dire la manière dont les sous-fenêtres seront affichées.
| Constante | Valeur | Description |
|---|---|---|
QMdiArea::SubWindowView | 0 | Affiche les sous-fenêtres avec des cadres de fenêtre (par défaut). |
QMdiArea::TabbedView | 1 | Affiche les sous-fenêtres avec des onglets dans une barre d'onglets. |
Voir aussi setViewMode().
enum QMdiArea::WindowOrder
Spécifie les critères à utiliser pour ordonner la liste des fenêtres enfants renvoyée par subWindowList(). Les fonctions cascadeSubWindows() et tileSubWindows() suivent cet ordre lorsqu'elles classent les fenêtres.
| Constante | Valeur | Description |
|---|---|---|
QMdiArea::CreationOrder | 0 | Les fenêtres sont renvoyées dans l'ordre de leur création. |
QMdiArea::StackingOrder | 1 | Les fenêtres sont renvoyées dans l'ordre dans lequel elles sont empilées, la fenêtre la plus haute étant la dernière de la liste. |
QMdiArea::ActivationHistoryOrder | 2 | Les fenêtres sont renvoyées dans l'ordre dans lequel elles ont été activées. |
Voir également subWindowList().
Documentation sur les propriétés
activationOrder : WindowOrder
Cette propriété définit les critères d'ordre pour les listes de sous-fenêtres
Cette propriété spécifie le critère d'ordre pour la liste des sous-fenêtres renvoyée par subWindowList(). Par défaut, il s'agit de l'ordre de création des fenêtres.
Fonctions d'accès :
| QMdiArea::WindowOrder | activationOrder() const |
| void | setActivationOrder(QMdiArea::WindowOrder order) |
Voir aussi subWindowList().
background : QBrush
Cette propriété définit la brosse d'arrière-plan de l'espace de travail
Cette propriété définit la brosse d'arrière-plan pour l'espace de travail lui-même. Par défaut, il s'agit d'une couleur grise, mais il peut s'agir de n'importe quelle brosse (par exemple, des couleurs, des dégradés ou des pixmaps).
Fonctions d'accès :
| QBrush | background() const |
| void | setBackground(const QBrush &background) |
documentMode : bool
Cette propriété indique si la barre d'onglets est définie en mode document dans le mode d'affichage par onglets.
Le mode document est désactivé par défaut.
Fonctions d'accès :
| bool | documentMode() const |
| void | setDocumentMode(bool enabled) |
Voir aussi QTabBar::documentMode et setViewMode().
tabPosition : QTabWidget::TabPosition
Cette propriété définit la position des onglets en mode tabbed view.
Les valeurs possibles pour cette propriété sont décrites par l'énumération QTabWidget::TabPosition.
Fonctions d'accès :
| QTabWidget::TabPosition | tabPosition() const |
| void | setTabPosition(QTabWidget::TabPosition position) |
Voir également QTabWidget::TabPosition et setViewMode().
tabShape : QTabWidget::TabShape
Cette propriété définit la forme des onglets en mode tabbed view.
Les valeurs possibles pour cette propriété sont QTabWidget::Rounded (par défaut) ou QTabWidget::Triangular.
Fonctions d'accès :
| QTabWidget::TabShape | tabShape() const |
| void | setTabShape(QTabWidget::TabShape shape) |
Voir aussi QTabWidget::TabShape et setViewMode().
tabsClosable : bool
Cette propriété indique si la barre d'onglets doit placer des boutons de fermeture sur chaque onglet en mode d'affichage par onglets.
Par défaut, les onglets ne peuvent pas être fermés.
Fonctions d'accès :
| bool | tabsClosable() const |
| void | setTabsClosable(bool closable) |
Voir aussi QTabBar::tabsClosable et setViewMode().
tabsMovable : bool
Cette propriété indique si l'utilisateur peut déplacer les onglets dans la zone de la barre d'onglets en mode d'affichage par onglets.
Par défaut, les onglets ne sont pas déplaçables.
Fonctions d'accès :
| bool | tabsMovable() const |
| void | setTabsMovable(bool movable) |
Voir aussi QTabBar::movable et setViewMode().
viewMode : ViewMode
Cette propriété définit la manière dont les sous-fenêtres sont affichées dans le site QMdiArea.
Par défaut, le site SubWindowView est utilisé pour afficher les sous-fenêtres.
Fonctions d'accès :
| QMdiArea::ViewMode | viewMode() const |
| void | setViewMode(QMdiArea::ViewMode mode) |
Voir également ViewMode, setTabShape() et setTabPosition().
Documentation des fonctions membres
QMdiArea::QMdiArea(QWidget *parent = nullptr)
Construit une zone mdi vide. parent est transmis au constructeur de QWidget.
[virtual noexcept] QMdiArea::~QMdiArea()
Détruit la zone MDI.
[slot] void QMdiArea::activateNextSubWindow()
Donne le focus clavier à une autre fenêtre dans la liste des fenêtres enfants. La fenêtre activée sera la suivante, déterminée par l'adresse activation order.
Voir également activatePreviousSubWindow() et QMdiArea::WindowOrder.
[slot] void QMdiArea::activatePreviousSubWindow()
Donne le focus clavier à une autre fenêtre dans la liste des fenêtres enfants. La fenêtre activée sera la précédente, déterminée par l'adresse activation order.
Voir également activateNextSubWindow() et QMdiArea::WindowOrder.
QMdiSubWindow *QMdiArea::activeSubWindow() const
Renvoie un pointeur sur la sous-fenêtre active actuelle. Si aucune fenêtre n'est active, nullptr est renvoyé.
Les sous-fenêtres sont traitées comme des fenêtres de niveau supérieur en ce qui concerne l'état de la fenêtre, c'est-à-dire que si un widget situé en dehors de la zone MDI est la fenêtre active, aucune sous-fenêtre ne sera active. Notez que si un widget de la fenêtre dans laquelle se trouve la zone MDI gagne le focus, la fenêtre sera activée.
Voir également setActiveSubWindow() et Qt::WindowState.
QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())
Ajoute widget comme nouvelle sous-fenêtre à la zone MDI. Si windowFlags est différent de zéro, il remplacera les drapeaux définis sur le widget.
Le site widget peut être soit un site QMdiSubWindow, soit un autre site QWidget (dans ce cas, la zone MDI créera une sous-fenêtre et définira le site widget comme widget interne).
Remarque : une fois la sous-fenêtre ajoutée, son parent sera le widget viewport de QMdiArea.
QMdiArea mdiArea; QMdiSubWindow *subWindow1 = new QMdiSubWindow; subWindow1->setWidget(internalWidget1); subWindow1->setAttribute(Qt::WA_DeleteOnClose); mdiArea.addSubWindow(subWindow1); QMdiSubWindow *subWindow2 = mdiArea.addSubWindow(internalWidget2);
Lorsque vous créez votre propre sous-fenêtre, vous devez définir l'attribut de widget Qt::WA_DeleteOnClose si vous souhaitez que la fenêtre soit supprimée lorsqu'elle est fermée dans la zone MDI. Sinon, la fenêtre sera cachée et la zone MDI n'activera pas la sous-fenêtre suivante.
Renvoie l'adresse QMdiSubWindow qui est ajoutée à la zone MDI.
Voir également removeSubWindow().
[slot] void QMdiArea::cascadeSubWindows()
Organise toutes les fenêtres enfants selon un modèle en cascade.
Voir également tileSubWindows().
[override virtual protected] void QMdiArea::childEvent(QChildEvent *childEvent)
Réimplémente : QObject::childEvent(QChildEvent *event).
[slot] void QMdiArea::closeActiveSubWindow()
Ferme la sous-fenêtre active.
Voir aussi closeAllSubWindows().
[slot] void QMdiArea::closeAllSubWindows()
Ferme toutes les sous-fenêtres en envoyant un message QCloseEvent à chacune d'entre elles. Il est possible que vous receviez des signaux subWindowActivated() des sous-fenêtres avant qu'elles ne soient fermées (si la zone MDI active la sous-fenêtre alors qu'une autre est en train de se fermer).
Les sous-fenêtres qui ignorent l'événement de fermeture resteront ouvertes.
Voir également closeActiveSubWindow().
QMdiSubWindow *QMdiArea::currentSubWindow() const
Renvoie un pointeur sur la sous-fenêtre courante, ou nullptr s'il n'y a pas de sous-fenêtre courante.
Cette fonction renvoie la même chose que activeSubWindow() si la fenêtre QApplication contenant QMdiArea est active.
Voir aussi activeSubWindow() et QApplication::activeWindow().
[override virtual protected] bool QMdiArea::event(QEvent *event)
Réimplémente : QAbstractScrollArea::event(QEvent *event).
[override virtual protected] bool QMdiArea::eventFilter(QObject *object, QEvent *event)
Réimplémente : QObject::eventFilter(QObject *watched, QEvent *event).
[override virtual] QSize QMdiArea::minimumSizeHint() const
Réimplémente : QAbstractScrollArea::minimumSizeHint() const.
[override virtual protected] void QMdiArea::paintEvent(QPaintEvent *paintEvent)
Réimplémente : QAbstractScrollArea::paintEvent(QPaintEvent *event).
void QMdiArea::removeSubWindow(QWidget *widget)
Supprime widget de la zone MDI. Le widget doit être soit un QMdiSubWindow, soit un widget qui est le widget interne d'une sous-fenêtre. Remarque : widget n'est jamais réellement supprimé par QMdiArea. Si un QMdiSubWindow est transmis, son parent est défini sur nullptr et il est supprimé ; mais si un widget interne est transmis, le widget enfant est défini sur nullptr et le QMdiSubWindow n' est pas supprimé.
Voir aussi addSubWindow().
[override virtual protected] void QMdiArea::resizeEvent(QResizeEvent *resizeEvent)
Réimplémente : QAbstractScrollArea::resizeEvent(QResizeEvent *event).
[override virtual protected] void QMdiArea::scrollContentsBy(int dx, int dy)
Réimplémente : QAbstractScrollArea::scrollContentsBy(int dx, int dy).
[slot] void QMdiArea::setActiveSubWindow(QMdiSubWindow *window)
Active la sous-fenêtre window. Si window est nullptr, toute fenêtre active est désactivée.
Voir aussi activeSubWindow().
void QMdiArea::setOption(QMdiArea::AreaOption option, bool on = true)
Si on est vrai, option est activé sur la zone MDI, sinon il est désactivé. Voir AreaOption pour l'effet de chaque option.
Voir également AreaOption et testOption().
[override virtual protected slot] void QMdiArea::setupViewport(QWidget *viewport)
Réimplémente : QAbstractScrollArea::setupViewport(QWidget *viewport).
Ce slot est appelé par QAbstractScrollArea après que setViewport() a été appelé. Réimplémentez cette fonction dans une sous-classe de QMdiArea pour initialiser le nouveau viewport avant qu'il ne soit utilisé.
Voir aussi setViewport().
[override virtual protected] void QMdiArea::showEvent(QShowEvent *showEvent)
Réimplémente : QWidget::showEvent(QShowEvent *event).
[override virtual] QSize QMdiArea::sizeHint() const
Réimplémente : QAbstractScrollArea::sizeHint() const.
[signal] void QMdiArea::subWindowActivated(QMdiSubWindow *window)
QMdiArea émet ce signal après l'activation de window. Lorsque window est nullptr, QMdiArea vient de désactiver sa dernière fenêtre active et il n'y a aucune fenêtre active dans l'espace de travail.
Voir également QMdiArea::activeSubWindow().
QList<QMdiSubWindow *> QMdiArea::subWindowList(QMdiArea::WindowOrder order = CreationOrder) const
Renvoie une liste de toutes les sous-fenêtres de la zone MDI. Si order est CreationOrder (valeur par défaut), les fenêtres sont triées dans l'ordre dans lequel elles ont été insérées dans l'espace de travail. Si order est StackingOrder, les fenêtres sont classées dans l'ordre d'empilement, la fenêtre la plus haute étant le dernier élément de la liste. Si order est ActivationHistoryOrder, les fenêtres sont classées en fonction de leur historique d'activation récent.
Voir également WindowOrder.
bool QMdiArea::testOption(QMdiArea::AreaOption option) const
Renvoie true si option est activé ; sinon, renvoie false.
Voir aussi AreaOption et setOption().
[slot] void QMdiArea::tileSubWindows()
Dispose toutes les fenêtres enfant dans un motif de tuiles.
Voir également cascadeSubWindows().
[override virtual protected] void QMdiArea::timerEvent(QTimerEvent *timerEvent)
Réimplémente : QObject::timerEvent(QTimerEvent *event).
[override virtual protected] bool QMdiArea::viewportEvent(QEvent *event)
Réimplémente : QAbstractScrollArea::viewportEvent(QEvent *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.

