Sur cette page

QMainWindow Class

La classe `QMainWindow` permet de créer une fenêtre principale d'application. En savoir plus...

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

Types publics

enum DockOption { AnimatedDocks, AllowNestedDocks, AllowTabbedDocks, ForceTabbedDocks, VerticalTabs, GroupedDragging }
flags DockOptions

Propriétés

Fonctions publiques

QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QMainWindow()
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)
void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
void addToolBar(QToolBar *toolbar)
QToolBar *addToolBar(const QString &title)
void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)
QWidget *centralWidget() const
Qt::DockWidgetArea corner(Qt::Corner corner) const
virtual QMenu *createPopupMenu()
QMainWindow::DockOptions dockOptions() const
Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const
bool documentMode() const
QSize iconSize() const
void insertToolBar(QToolBar *before, QToolBar *toolbar)
void insertToolBarBreak(QToolBar *before)
bool isAnimated() const
bool isDockNestingEnabled() const
QMenuBar *menuBar() const
QWidget *menuWidget() const
void removeDockWidget(QDockWidget *dockwidget)
void removeToolBar(QToolBar *toolbar)
void removeToolBarBreak(QToolBar *before)
void resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)
bool restoreDockWidget(QDockWidget *dockwidget)
bool restoreState(const QByteArray &state, int version = 0)
QByteArray saveState(int version = 0) const
void setCentralWidget(QWidget *widget)
void setCorner(Qt::Corner corner, Qt::DockWidgetArea area)
void setDockOptions(QMainWindow::DockOptions options)
void setDocumentMode(bool enabled)
void setIconSize(const QSize &iconSize)
void setMenuBar(QMenuBar *menuBar)
void setMenuWidget(QWidget *menuBar)
void setStatusBar(QStatusBar *statusbar)
void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)
void setTabShape(QTabWidget::TabShape tabShape)
void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
void splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
QStatusBar *statusBar() const
QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const
QTabWidget::TabShape tabShape() const
QList<QDockWidget *> tabifiedDockWidgets(QDockWidget *dockwidget) const
void tabifyDockWidget(QDockWidget *first, QDockWidget *second)
QWidget *takeCentralWidget()
Qt::ToolBarArea toolBarArea(const QToolBar *toolbar) const
bool toolBarBreak(QToolBar *toolbar) const
Qt::ToolButtonStyle toolButtonStyle() const
bool unifiedTitleAndToolBarOnMac() const

Emplacements publics

void setAnimated(bool enabled)
void setDockNestingEnabled(bool enabled)
void setUnifiedTitleAndToolBarOnMac(bool set)

Signaux

void iconSizeChanged(const QSize &iconSize)
void tabifiedDockWidgetActivated(QDockWidget *dockWidget)
void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)

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

virtual void contextMenuEvent(QContextMenuEvent *event) override
virtual bool event(QEvent *event) override

Description détaillée

Framework de fenêtre principale Qt

Une fenêtre principale fournit une infrastructure permettant de créer l'interface utilisateur d'une application. Qt dispose de QMainWindow et de ses classes associées pour la gestion de la fenêtre principale. QMainWindow possède sa propre mise en page à laquelle vous pouvez ajouter des « QToolBars », des « QDockWidgets », un « QMenuBar » et un « QStatusBar ». La mise en page comporte une zone centrale qui peut être occupée par n’importe quel type de widget. Vous pouvez voir une image de cette mise en page ci-dessous.

Schéma de la fenêtre principale et de l'emplacement de ses composants

Création des composants de la fenêtre principale

Un widget central est généralement un widget Qt standard, tel qu’un QTextEdit ou un QGraphicsView. Des widgets personnalisés peuvent également être utilisés pour des applications avancées. Vous définissez le widget central à l’aide de setCentralWidget().

Les fenêtres principales disposent d’une interface à document unique (SDI) ou à documents multiples (MDI). Dans Qt, on crée des applications MDI en utilisant un ` QMdiArea ` comme widget central.

Nous allons maintenant examiner chacun des autres widgets pouvant être ajoutés à une fenêtre principale. Nous donnons des exemples illustrant comment les créer et les ajouter.

Création de menus

Qt implémente les menus dans ` QMenu ` et `QMainWindow` les stocke dans une ` QMenuBar`. Des ` QAction` sont ajoutés aux menus, qui les affichent sous forme d’éléments de menu.

Vous pouvez ajouter de nouveaux menus à la barre de menus de la fenêtre principale en appelant ` menuBar()`, qui renvoie l’` QMenuBar ` de la fenêtre, puis en ajoutant un menu à l’aide de ` QMenuBar::addMenu()`.

QMainWindow est fournie avec une barre de menus par défaut, mais vous pouvez également en définir une vous-même à l’aide de la fonction ` setMenuBar()`. Si vous souhaitez implémenter une barre de menus personnalisée (c’est-à-dire ne pas utiliser le widget ` QMenuBar `), vous pouvez la définir à l’aide de la fonction ` setMenuWidget()`.

Voici un exemple illustrant comment créer des menus :

    void MainWindow::createMenus()
    {
        fileMenu = menuBar()->addMenu(tr("&File"));
        fileMenu->addAction(newAct);
        fileMenu->addAction(openAct);
        fileMenu->addAction(saveAct);

La fonction createPopupMenu() crée des menus contextuels lorsque la fenêtre principale reçoit des événements de menu contextuel. L'implémentation par défaut génère un menu contenant les actions cochables issues des widgets du dock et des barres d'outils. Vous pouvez réimplémenter createPopupMenu() pour obtenir un menu personnalisé.

Création de barres d’outils

Les barres d’outils sont implémentées dans la classe ` QToolBar `. Vous ajoutez une barre d’outils à une fenêtre principale à l’aide de ` addToolBar()`.

Vous contrôlez la position initiale des barres d’outils en les attribuant à un Qt::ToolBarArea spécifique. Vous pouvez diviser une zone en insérant une coupure de barre d’outils — à considérer comme un saut de ligne dans l’édition de texte — à l’aide de addToolBarBreak() ou insertToolBarBreak(). Vous pouvez également restreindre le placement par l’utilisateur avec QToolBar::setAllowedAreas() et QToolBar::setMovable().

La taille des icônes de la barre d'outils peut être récupérée à l'aide de iconSize(). Les tailles dépendent de la plate-forme ; vous pouvez définir une taille fixe à l'aide de setIconSize(). Vous pouvez modifier l'apparence de tous les boutons d'outils dans les barres d'outils à l'aide de setToolButtonStyle().

Voici un exemple de création de barre d'outils :

    void MainWindow::createToolBars()
    {
        fileToolBar = addToolBar(tr("File"));
        fileToolBar->addAction(newAct);

Création de widgets ancrables

Les widgets d’ancrage sont implémentés dans la classe ` QDockWidget `. Un widget d’ancrage est une fenêtre pouvant être ancrée dans la fenêtre principale. Vous ajoutez des widgets d’ancrage à une fenêtre principale à l’aide de ` addDockWidget()`.

Il existe quatre zones de widgets d'ancrage, définies par l'énumération Qt::DockWidgetArea: gauche, droite, haut et bas. Vous pouvez spécifier quelle zone de widget d'ancrage doit occuper les coins où les zones se chevauchent à l'aide de ` setCorner()`. Par défaut, chaque zone ne peut contenir qu'une seule ligne (verticale ou horizontale) de widgets d'ancrage, mais si vous activez l'imbrication à l'aide de ` setDockNestingEnabled()`, les widgets d'ancrage peuvent être ajoutés dans les deux sens.

Deux widgets d’ancrage peuvent également être empilés l’un sur l’autre. Une propriété « QTabBar » est alors utilisée pour sélectionner lequel des widgets doit être affiché.

Voici un exemple illustrant comment créer et ajouter des widgets d'ancrage à une fenêtre principale :

QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea |
                            Qt::RightDockWidgetArea);
dockWidget->setWidget(dockWidgetContents);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

La barre d’état

Vous pouvez définir une barre d’état à l’aide de ` setStatusBar()`, mais celle-ci est créée lors du premier appel de ` statusBar() ` (qui renvoie la barre d’état de la fenêtre principale). Consultez ` QStatusBar ` pour plus d’informations sur son utilisation.

Enregistrement de l’état

QMainWindow peut enregistrer l’état de sa disposition à l’aide de ` saveState()` ; celui-ci peut ensuite être récupéré avec ` restoreState()`. Ce sont la position et la taille (par rapport à la taille de la fenêtre principale) des barres d’outils et des widgets ancrables qui sont enregistrées.

Considérations de sécurité

La fonction restoreState() désérialise un blob binaire versionné qui décrit la disposition des barres d’outils et des widgets d’ancrage, y compris une structure arborescente imbriquée de manière récursive pour les zones d’ancrage divisées et à onglets. Le marqueur magique et la version du format sont validés, mais les champs individuels — tels que les indices des zones d'ancrage et la profondeur de l'arborescence de disposition imbriquée — ne font pas l'objet d'une vérification des limites par rapport à la configuration réelle de la fenêtre principale une fois que la structure externe a été acceptée.

Ne transmettez à la fonction ` restoreState()` qu’un objet ` QByteArray ` ayant été préalablement généré par la fonction ` saveState()` et persisté par la même version — ou une version compatible — de votre application, généralement via la méthode ` QSettings`. N’appelez pas la fonction ` 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 QMenuBar, QToolBar, QStatusBar, QDockWidget et l’exemple « Menus ».

Documentation sur les types de membres

enum QMainWindow::DockOption
flags QMainWindow::DockOptions

Cette énumération contient des indicateurs qui définissent le comportement d'ancrage de QMainWindow.

ConstanteValeurDescription
QMainWindow::AnimatedDocks0x01Identique à la propriété animated.
QMainWindow::AllowNestedDocks0x02Identique à la propriété dockNestingEnabled.
QMainWindow::AllowTabbedDocks0x04L'utilisateur peut faire glisser un widget d'ancrage « par-dessus » un autre. Les deux widgets sont empilés et une barre d'onglets apparaît pour sélectionner celui qui sera visible.
QMainWindow::ForceTabbedDocks0x08Chaque zone de dock contient une seule pile de widgets de dock à onglets. En d'autres termes, les widgets de dock ne peuvent pas être placés les uns à côté des autres dans une zone de dock. Si cette option est activée, AllowNestedDocks n'a aucun effet.
QMainWindow::VerticalTabs0x10Les deux zones d'ancrage verticales situées de part et d'autre de la fenêtre principale affichent leurs onglets à la verticale. Si cette option n'est pas activée, toutes les zones d'ancrage affichent leurs onglets en bas. Implique AllowTabbedDocks. Voir également setTabPosition().
QMainWindow::GroupedDragging0x20Lors du glissement de la barre de titre d’un dock, tous les onglets qui y sont associés seront également déplacés. Implique l’option AllowTabbedDocks. Ne fonctionne pas correctement si certains QDockWidgets sont soumis à des restrictions quant à la zone dans laquelle ils sont autorisés. (Cette valeur d’énumération a été ajoutée dans Qt 5.6.)

Ces options contrôlent uniquement la manière dont les widgets d’ancrage peuvent être déposés dans un QMainWindow. Elles ne réorganisent pas les widgets d’ancrage pour les conformer aux options spécifiées. C’est pourquoi elles doivent être définies avant l’ajout de tout widget d’ancrage à la fenêtre principale. Les options AnimatedDocks et VerticalTabs font exception à cette règle et peuvent être définies à tout moment.

Le type `DockOptions` est un `typedef` de ` QFlags<DockOption>`. Il stocke une combinaison (ou) de valeurs `DockOption`.

Documentation des propriétés

animated : bool

Cette propriété détermine si la manipulation des widgets d'ancrage et des barres d'outils est animée

Lorsqu’un widget d’ancrage ou une barre d’outils est glissé(e) au-dessus de la fenêtre principale, celle-ci ajuste son contenu pour indiquer où le widget d’ancrage ou la barre d’outils sera ancré(e) s’il est déposé(e). L’activation de cette propriété fait en sorte que QMainWindow déplace son contenu selon une animation fluide. La désactivation de cette propriété fait en sorte que le contenu s’aligne instantanément sur ses nouvelles positions.

Par défaut, cette propriété est activée. Elle peut être désactivée si la fenêtre principale contient des widgets dont le redimensionnement ou le rafraîchissement sont lents.

L'activation de cette propriété revient à activer l'option « AnimatedDocks » à l'aide de la fonction ` setDockOptions()`.

Fonctions d'accès :

bool isAnimated() const
void setAnimated(bool enabled)

dockNestingEnabled : bool

Cette propriété détermine si les docks peuvent être imbriqués

Si cette propriété est définie sur « false », les zones d'ancrage ne peuvent contenir qu'une seule ligne (horizontale ou verticale) de widgets d'ancrage. Si cette propriété est définie sur « true », la zone occupée par un widget d'ancrage peut être divisée dans les deux sens pour contenir davantage de widgets d'ancrage.

L'imbrication des docks n'est nécessaire que dans les applications contenant un grand nombre de widgets de dock. Elle offre à l'utilisateur une plus grande liberté dans l'organisation de sa fenêtre principale. Cependant, l’imbrication des docks entraîne un comportement plus complexe (et moins intuitif) lorsqu’un widget de dock est glissé sur la fenêtre principale, car il existe davantage de façons de placer un widget de dock déposé dans la zone de dock.

La configuration de cette propriété est identique à celle de l'option « AllowNestedDocks » à l'aide de la fonction setDockOptions().

Fonctions d'accès :

bool isDockNestingEnabled() const
void setDockNestingEnabled(bool enabled)

dockOptions : DockOptions

Cette propriété définit le comportement d'ancrage de QMainWindow

La valeur par défaut est AnimatedDocks | AllowTabbedDocks.

Fonctions d'accès :

QMainWindow::DockOptions dockOptions() const
void setDockOptions(QMainWindow::DockOptions options)

documentMode : bool

Cette propriété indique si la barre d'onglets des widgets ancrés à onglets est configurée en mode « document ».

La valeur par défaut est « false ».

Fonctions d'accès :

bool documentMode() const
void setDocumentMode(bool enabled)

Voir également QTabBar::documentMode.

iconSize : QSize

Taille des icônes de la barre d'outils dans cette fenêtre principale.

La valeur par défaut correspond à la taille par défaut des icônes de la barre d'outils du style d'interface graphique. Notez que les icônes utilisées doivent avoir au moins cette taille, car elles sont uniquement réduites.

Fonctions d'accès :

QSize iconSize() const
void setIconSize(const QSize &iconSize)

tabShape : QTabWidget::TabShape

Cette propriété définit la forme de l'onglet utilisée pour les widgets d'ancrage à onglets.

La valeur par défaut est « QTabWidget::Rounded ».

Fonctions d'accès :

QTabWidget::TabShape tabShape() const
void setTabShape(QTabWidget::TabShape tabShape)

Voir aussi setTabPosition().

toolButtonStyle : Qt::ToolButtonStyle

Style des boutons de la barre d'outils dans cette fenêtre principale.

Pour que le style des boutons de la barre d'outils suive les paramètres système, définissez cette propriété sur Qt::ToolButtonFollowStyle. Sous Unix, les paramètres utilisateur de l'environnement de bureau seront utilisés. Sur les autres plateformes, Qt::ToolButtonFollowStyle signifie « icône uniquement ».

La valeur par défaut est « Qt::ToolButtonIconOnly ».

Fonctions d’accès :

Qt::ToolButtonStyle toolButtonStyle() const
void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)

unifiedTitleAndToolBarOnMac : bool

Cette propriété s'applique que la fenêtre utilise ou non l'apparence unifiée du titre et de la barre d'outils sous macOS

Notez que l’implémentation Qt 5 présente plusieurs limitations par rapport à Qt 4 :

  • L'utilisation dans des fenêtres contenant du contenu OpenGL n'est pas prise en charge. Cela inclut QOpenGLWidget.
  • L'utilisation de barres d'outils ancrables ou déplaçables peut entraîner des erreurs d'affichage et n'est pas recommandée

Fonctions d'accès :

bool unifiedTitleAndToolBarOnMac() const
void setUnifiedTitleAndToolBarOnMac(bool set)

Documentation des fonctions membres

[explicit] QMainWindow::QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

Crée une fenêtre QMainWindow avec l'parent on indiquée et le widget spécifié flags.

QMainWindow active lui-même l'indicateur « Qt::Window » et sera donc toujours créé en tant que widget de niveau supérieur.

[virtual noexcept] QMainWindow::~QMainWindow()

Ferme la fenêtre principale.

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)

Ajoute l'dockwidget ion indiquée à l'area spécifiée dans la fenêtre principale.

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)

Ajoute dockwidget à l'area indiquée, dans la direction spécifiée par orientation.

void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)

Ajoute l'toolbar à l'area spécifiée dans cette fenêtre principale. L'toolbar est placée à la fin du bloc (c'est-à-dire de la ligne) actuel de la barre d'outils. Si la fenêtre principale gère déjà toolbar, la barre d'outils sera simplement déplacée vers area.

Voir également insertToolBar(), addToolBarBreak() et insertToolBarBreak().

void QMainWindow::addToolBar(QToolBar *toolbar)

Cela revient à appeler addToolBar(Qt::TopToolBarArea, toolbar)

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

QToolBar *QMainWindow::addToolBar(const QString &title)

Crée un objet ` QToolBar `, en définissant le titre de sa fenêtre sur « title », puis l'insère dans la zone de la barre d'outils supérieure.

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

Voir également setWindowTitle().

void QMainWindow::addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)

Ajoute une coupure de barre d'outils à l'area on indiquée, après tous les autres objets présents.

QWidget *QMainWindow::centralWidget() const

Renvoie le widget central de la fenêtre principale. Cette fonction renvoie « nullptr » si le widget central n’a pas été défini.

Voir également setCentralWidget().

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

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

Qt::DockWidgetArea QMainWindow::corner(Qt::Corner corner) const

Renvoie la zone du widget du dock qui occupe l'corner spécifiée.

Voir aussi setCorner().

[virtual] QMenu *QMainWindow::createPopupMenu()

Renvoie un menu contextuel contenant des éléments cochables correspondant aux barres d'outils et aux widgets ancrés présents dans la fenêtre principale. S'il n'y a ni barres d'outils ni widgets ancrés, cette fonction renvoie « nullptr ».

Par défaut, cette fonction est appelée par la fenêtre principale lorsque l’utilisateur active un menu contextuel, généralement en cliquant avec le bouton droit de la souris sur une barre d’outils ou un widget d’ancrage.

Si vous souhaitez créer un menu contextuel personnalisé, réimplémentez cette fonction et renvoyez un menu contextuel nouvellement créé. La propriété du menu contextuel est transférée à l'appelant.

Voir également addDockWidget(), addToolBar() et menuBar().

Qt::DockWidgetArea QMainWindow::dockWidgetArea(QDockWidget *dockwidget) const

Renvoie l'Qt::DockWidgetArea pour dockwidget. Si dockwidget n'a pas été ajouté à la fenêtre principale, cette fonction renvoie Qt::NoDockWidgetArea.

Voir également addDockWidget(), splitDockWidget() et Qt::DockWidgetArea.

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

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

[signal] void QMainWindow::iconSizeChanged(const QSize &iconSize)

Ce signal est émis lorsque la taille des icônes utilisées dans la fenêtre est modifiée. La nouvelle taille des icônes est transmise dans ` iconSize`.

Vous pouvez connecter ce signal à d'autres composants afin de garantir une apparence cohérente à votre application.

Voir également setIconSize().

void QMainWindow::insertToolBar(QToolBar *before, QToolBar *toolbar)

Insère l'élément toolbar dans la zone occupée par la barre d'outils before afin qu'il apparaisse avant celle-ci. Par exemple, dans le cadre d'une mise en page normale de gauche à droite, cela signifie que l'élément toolbar apparaîtra à gauche de la barre d'outils spécifiée par before dans une zone de barre d'outils horizontale.

Voir également insertToolBarBreak(), addToolBar() et addToolBarBreak().

void QMainWindow::insertToolBarBreak(QToolBar *before)

Insère une coupure de barre d'outils avant la barre d'outils spécifiée par ` before`.

Renvoie la barre de menus de la fenêtre principale. Cette fonction crée et renvoie une barre de menus vide si celle-ci n'existe pas.

Si vous souhaitez que toutes les fenêtres d’une application Mac partagent une même barre de menus, n’utilisez pas cette fonction pour la créer, car la barre de menus ainsi créée aura pour parent l’ QMainWindow. Vous devez plutôt créer une barre de menus sans parent, que vous pourrez ensuite partager entre toutes les fenêtres Mac. Créez une barre de menus sans parent de la manière suivante :

QMenuBar *menuBar = new QMenuBar(nullptr);

Voir également ` setMenuBar()` ().

Renvoie la barre de menu de la fenêtre principale. Cette fonction renvoie `null` si aucune barre de menu n'a encore été créée.

Voir aussi setMenuWidget().

void QMainWindow::removeDockWidget(QDockWidget *dockwidget)

Supprime l'dockwidget e de la disposition de la fenêtre principale et le masque. Notez que l'dockwidget e n' est pas supprimé.

void QMainWindow::removeToolBar(QToolBar *toolbar)

Supprime l'toolbar e de la disposition de la fenêtre principale et la masque. Notez que l'toolbar e n' est pas supprimée.

void QMainWindow::removeToolBarBreak(QToolBar *before)

Supprime une coupure de barre d'outils précédemment insérée avant la barre d'outils spécifiée par before.

void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)

Redimensionne les widgets du dock figurant dans la liste docks en fonction des tailles correspondantes en pixels indiquées dans la liste sizes. Si orientation vaut Qt::Horizontal, la largeur est ajustée ; dans le cas contraire, c'est la hauteur des widgets du dock qui est ajustée. Les tailles seront ajustées de manière à respecter les tailles maximale et minimale, et l'QMainWindow e lui-même ne sera pas redimensionné. Tout espace supplémentaire ou manquant est réparti entre les widgets en fonction du poids relatif de leurs tailles.

Exemple :

    resizeDocks({blueWidget, yellowWidget}, {20 , 40}, Qt::Horizontal);

Si les widgets bleu et jaune sont imbriqués au même niveau, ils seront redimensionnés de manière à ce que le widget jaune soit deux fois plus grand que le widget bleu.

Si certains widgets sont regroupés dans des onglets, un seul widget par groupe doit être spécifié. Les widgets ne figurant pas dans la liste peuvent être modifiés pour respecter les contraintes.

bool QMainWindow::restoreDockWidget(QDockWidget *dockwidget)

Restaure l'état de dockwidget s'il a été créé après l'appel à restoreState(). Renvoie true si l'état a été restauré ; sinon, renvoie false.

Voir également restoreState() et saveState().

bool QMainWindow::restoreState(const QByteArray &state, int version = 0)

Restaure l'state des barres d'outils et des widgets ancrables de cette fenêtre principale. Restaure également les paramètres des coins. Le nombre version est comparé à celui stocké dans state. S'ils ne correspondent pas, l'état de la fenêtre principale reste inchangé et cette fonction renvoie false; dans le cas contraire, l'état est restauré et cette fonction renvoie true.

Pour restaurer la géométrie enregistrée à l’aide de ` QSettings`, vous pouvez utiliser un code similaire à celui-ci :

void MainWindow::readSettings()
{
    QSettings settings("MyCompany", "MyApp");
    restoreGeometry(settings.value("myWidget/geometry").toByteArray());
    restoreState(settings.value("myWidget/windowState").toByteArray());
}

Voir également saveState(), QWidget::saveGeometry(), QWidget::restoreGeometry() et restoreDockWidget().

QByteArray QMainWindow::saveState(int version = 0) const

Enregistre l'état actuel des barres d'outils et des widgets ancrables de cette fenêtre principale. Cela inclut les paramètres de coin pouvant être définis à l'aide de la fonction setCorner(). Le numéro d'version est stocké dans les données.

La propriété ` objectName ` sert à identifier chaque ` QToolBar ` et ` QDockWidget`. Vous devez vous assurer que cette propriété est unique pour chaque ` QToolBar ` et ` QDockWidget ` que vous ajoutez à la QMainWindow

Pour restaurer l’état enregistré, transmettez la valeur de retour et le numéro version à restoreState().

Pour enregistrer la géométrie à la fermeture de la fenêtre, vous pouvez implémenter un événement de fermeture comme suit :

void MyMainWindow::closeEvent(QCloseEvent *event)
{
    QSettings settings("MyCompany", "MyApp");
    settings.setValue("geometry", saveGeometry());
    settings.setValue("windowState", saveState());
    QMainWindow::closeEvent(event);
}

Voir également restoreState(), QWidget::saveGeometry() et QWidget::restoreGeometry().

void QMainWindow::setCentralWidget(QWidget *widget)

Définit l'widget spécifié comme widget central de la fenêtre principale.

Remarque : QMainWindow prend possession du pointeur widget et le supprime au moment opportun.

Voir aussi centralWidget().

void QMainWindow::setCorner(Qt::Corner corner, Qt::DockWidgetArea area)

Définit le widget de dock area pour qu'il occupe l'emplacement spécifié corner.

Voir également corner().

void QMainWindow::setMenuBar(QMenuBar *menuBar)

Définit la barre de menus de la fenêtre principale sur « menuBar ».

Remarque : la fonction ` QMainWindow ` prend en charge le pointeur ` menuBar ` et le supprime au moment opportun.

Voir aussi menuBar().

void QMainWindow::setMenuWidget(QWidget *menuBar)

Définit la barre de menu de la fenêtre principale sur « menuBar ».

QMainWindow Prend possession du pointeur ` menuBar ` et le supprime au moment opportun.

Voir aussi menuWidget().

void QMainWindow::setStatusBar(QStatusBar *statusbar)

Définit la barre d'état de la fenêtre principale sur « statusbar ».

Définir la barre d’état sur ` nullptr ` la supprime de la fenêtre principale. Notez que la fonction ` QMainWindow ` prend en charge le pointeur ` statusbar ` et le supprime au moment opportun.

Voir également statusBar().

void QMainWindow::setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)

Définit la position des onglets du widget d'ancrage areas sur la valeur spécifiée tabPosition. Par défaut, toutes les zones d'ancrage affichent leurs onglets en bas.

Remarque : l’option dock ` VerticalTabs ` remplace les positions d’onglets définies par cette méthode.

Voir également tabPosition() et setTabShape().

void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)

Divise l’espace occupé par le widget d’ancrage « first » en deux parties, déplace le widget d’ancrage « first » dans la première partie et le widget d’ancrage « second » dans la seconde partie.

L'option « orientation » (Mode de division) spécifie comment l'espace est divisé : une division « Qt::Horizontal » place le deuxième widget ancré à droite du premier ; une division « Qt::Vertical » place le deuxième widget ancré en dessous du premier.

Remarque: si first se trouve actuellement dans une zone d’ancrage à onglets, second sera ajouté en tant que nouvel onglet, et non à côté de first. En effet, un même onglet ne peut contenir qu’un seul widget d’ancrage.

Remarque: la méthode ` Qt::LayoutDirection ` influence l’ordre des widgets d’ancrage dans les deux parties de la zone divisée. Lorsque la direction de mise en page de droite à gauche est activée, l’ordre des widgets d’ancrage sera inversé.

Voir également tabifyDockWidget(), addDockWidget() et removeDockWidget().

QStatusBar *QMainWindow::statusBar() const

Renvoie la barre d'état de la fenêtre principale. Cette fonction crée et renvoie une barre d'état vide si celle-ci n'existe pas.

Voir aussi setStatusBar().

QTabWidget::TabPosition QMainWindow::tabPosition(Qt::DockWidgetArea area) const

Renvoie la position des tabulations pour area.

Remarque : l'option « VerticalTabs » du dock remplace les positions des onglets renvoyées par cette fonction.

Voir également ` setTabPosition()` et ` tabShape()`.

[signal] void QMainWindow::tabifiedDockWidgetActivated(QDockWidget *dockWidget)

Ce signal est émis lorsque le widget du dock à onglets est activé par la sélection de l'onglet. Le widget du dock activé est transmis via ` dockWidget`.

Voir également ` tabifyDockWidget()` et ` tabifiedDockWidgets()`.

QList<QDockWidget *> QMainWindow::tabifiedDockWidgets(QDockWidget *dockwidget) const

Renvoie les widgets du dock regroupés sous forme d'onglets à l'aide de la fonction ` dockwidget`.

Voir aussi tabifyDockWidget().

void QMainWindow::tabifyDockWidget(QDockWidget *first, QDockWidget *second)

Déplace le widget d'ancrage « second » au-dessus du widget d'ancrage « first », créant ainsi une zone d'ancrage à onglets à l'emplacement actuel de « first ».

Les deux widgets de dock doivent avoir été ajoutés à la fenêtre principale à l’aide de la fonction addDockWidget() avant l’appel de cette fonction, et aucun des deux ne doit déjà comporter d’onglets.

Voir également tabifiedDockWidgets() et addDockWidget().

QWidget *QMainWindow::takeCentralWidget()

Supprime le widget central de cette fenêtre principale.

La propriété du widget supprimé est transférée à l'appelant.

Qt::ToolBarArea QMainWindow::toolBarArea(const QToolBar *toolbar) const

Renvoie l’ Qt::ToolBarArea pour toolbar. Si toolbar n’a pas été ajouté à la fenêtre principale, cette fonction renvoie Qt::NoToolBarArea.

Voir également addToolBar(), addToolBarBreak() et Qt::ToolBarArea.

bool QMainWindow::toolBarBreak(QToolBar *toolbar) const

Indique s'il existe une coupure de barre d'outils avant l'élément toolbar.

Voir également addToolBarBreak() et insertToolBarBreak().

[signal] void QMainWindow::toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)

Ce signal est émis lorsque le style utilisé pour les boutons d'outils de la fenêtre est modifié. Le nouveau style est transmis dans ` toolButtonStyle`.

Vous pouvez connecter ce signal à d’autres composants afin de garantir une apparence cohérente à votre application.

Voir également ` setToolButtonStyle()`.

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