Sur cette page

Mise en forme des menus et des vues d'éléments

Cette page fait partie du Guide de référence sur le style des widgets. Pour obtenir des explications sur les arborescences d’éléments, les captures d’écran et les tableaux, consultez cette page. Les indicateurs d’état et les membres communs définis par chaque widget sont répertoriés dans la section « Comment un style dessine un widget ».

QMenu conserve une liste d’actions et dessine chacune d’elles sous forme d’élément de menu. Lors d’un événement de dessin, il dessine le panneau du menu, puis chaque élément à l’aide de ` CE_MenuItem ` et de ` QStyleOptionMenuItem`, et enfin le cadre. Les éléments de menu ne disposent pas d’élément d’étiquette distinct ; ` CE_MenuItem ` dessine donc la coche, l’icône, le texte, le raccourci et la flèche de sous-menu.

  • PE_PanelMenu, l’arrière-plan
  • CE_MenuItem, une fois par action (PM_SmallIconSize)
    • PE_IndicatorMenuCheckMark, pour un élément coché. De nombreux styles utilisent plutôt PE_IndicatorCheckBox et PE_IndicatorRadioButton.
    • PE_IndicatorArrowRight ou PE_IndicatorArrowLeft, pour un élément qui ouvre un sous-menu
  • CE_MenuScroller (PM_MenuScrollerHeight), lorsque le menu est trop haut pour tenir à l’écran et que SH_Menu_Scrollable est défini
  • CE_MenuTearoff (PM_MenuTearoffHeight), pour un menu tear-off
  • PE_FrameMenu (PM_MenuPanelWidth), le cadre, avec une QStyleOptionFrame dont l’ lineWidth est PM_MenuPanelWidth
  • CE_MenuEmptyArea, pour l’espace non occupé par les éléments ou le cadre

QMenu organise lui-même les éléments, en utilisant PM_MenuHMargin, PM_MenuVMargin, PM_MenuPanelWidth et PM_MenuDesktopFrameWidth. Il consulte également de nombreuses indications de SH_Menu_, telles que SH_Menu_SubMenuPopupDelay, SH_Menu_MouseTracking et SH_Menu_Mask.

Menu comportant un élément avec une icône, un élément coché, un élément de sous-menu, un élément désactivé et un élément simple, chaque élément étant mis en surbrillance

QMenu réinitialise l’état après l’appel de ` initFrom()`, de sorte que les éléments ne contiennent que ` State_Enabled`, ` State_Active` et les indicateurs figurant dans ce tableau :

ÉtatActivé lorsque
State_SelectedL'élément est mis en surbrillance et n'est pas un séparateur.
State_SunkenL’élément est enfoncé.
State_DownArrowL’élément est une barre de défilement qui fait défiler le menu vers le bas.
State_EnabledL'action est activée. Les actions désactivées effacent cet indicateur même lorsque le menu est activé.

Les membres de ` QStyleOptionMenuItem ` sont :

MembreDescription
menuItemTypeUne valeur de l'MenuItemType: un élément normal, l'élément par défaut, un séparateur, un sous-menu, un élément défilant, un élément détachable, une marge ou une zone vide.
checkTypeUne valeur de type « CheckType » : non cochable, exclusif ou non exclusif.
checkedIndique si l'élément est coché.
menuHasCheckableItemsIndique si au moins un élément du menu est cochable, afin que le style puisse réserver de l'espace pour les coches.
menuRectLe rectangle de l'ensemble du menu.
textTexte de l'élément. Un caractère de tabulation sépare le texte du raccourci.
iconL'icône de l'élément.
maxIconWidthLa largeur de l'icône la plus large du menu.
reservedShortcutWidthLa largeur réservée à la colonne des raccourcis.
fontLa police utilisée pour le texte des éléments.

Pour CE_MenuScroller et CE_MenuTearoff, le menu ne définit que menuItemType, checkType, maxIconWidth et reservedShortcutWidth. CE_MenuEmptyArea définit également menuRect.

QMenuBar dessine chaque titre de menu avec CE_MenuBarItem et un QStyleOptionMenuItemV2, l’espace après le dernier titre avec CE_MenuBarEmptyArea, et son panneau avec PE_PanelMenuBar et un QStyleOptionFrame. Les menus déroulants sont des QMenu; voir Menus.

  • CE_MenuBarItem, une fois par menu (PM_SmallIconSize)
  • PE_PanelMenuBar (PM_MenuBarPanelWidth)
  • CE_MenuBarEmptyArea

La barre de menus dispose les éléments à l’aide de PM_MenuBarItemSpacing, PM_MenuBarHMargin et PM_MenuBarVMargin, et les redimensionne avec CT_MenuBarItem. Le peintre que QMenuBar transmet pour le panneau est découpé aux quatre bandes de bordure, chacune d’une largeur de PM_MenuBarPanelWidth, de sorte que le panneau ne peut peindre que la bordure. Le peintre pour la zone vide est découpé à l’espace restant après les éléments et la bordure. La barre consulte SH_MenuBar_MouseTracking, SH_MenuBar_AltKeyNavigation et SH_DrawMenuBarSeparator.

Sous macOS, QMenuBar utilise par défaut la barre de menus native et ne dessine rien. Appelez QMenuBar::setNativeMenuBar() pour lui faire appliquer le style.

Barre de menus comprenant les menus Fichier, Édition, Affichage et Aide, chaque élément et la zone vide étant mis en surbrillance

QMenuBar remplit l’option elle-même plutôt que d’appeler ` initFrom()`. Elle définit ` State_Enabled ` lorsque la barre est activée, ainsi que ces indicateurs sur les éléments :

ÉtatActivé lorsque
State_SelectedL’élément est mis en surbrillance.
State_SunkenLe menu de l’élément est ouvert.
State_HasFocusLa barre de menu a le focus ou contient un élément actif.
State_MouseOverLa souris survole l'élément.

La barre de menu utilise les membres suivants de l'QStyleOptionMenuItem:

MembreDescription
menuRectLe rectangle de l'ensemble de la barre de menu.
textLe titre du menu.
iconL'icône du menu. Peu de styles la dessinent.

Pour le panneau, la propriété « QStyleOptionFrame::lineWidth » est définie sur « PM_MenuBarPanelWidth » et la propriété « midLineWidth » sur 0.

En-têtes de la vue des éléments

QHeaderView dessine chaque en-tête de section avec ` CE_Header ` et un ` QStyleOptionHeaderV2`. ` QCommonStyle ` le divise en trois parties : l’arrière-plan de la section, le libellé et l’indicateur de tri :

  • CE_Header, une fois par section (PM_HeaderMargin)
    • CE_HeaderSection
    • CE_HeaderLabel (SE_HeaderLabel)
    • PE_IndicatorHeaderArrow (SE_HeaderArrow, PM_HeaderMarkSize), pour la section triée
  • CE_HeaderEmptyArea, pour l'espace après la dernière section

La vue d’en-tête dimensionne ses sections à l’aide de ` CT_HeaderSection ` et utilise ` PM_HeaderGripMargin ` pour la zone dans laquelle l’utilisateur peut faire glisser la limite d’une section. ` QTableView ` dessine le bouton dans le coin supérieur gauche, à la jonction des deux en-têtes, sous la forme d’un ` CE_Header`. L’indice ` SH_Header_ArrowAlignment ` place l’indicateur de tri.

Tableau comportant les en-têtes « Nom », « Taille » et « Modifié », avec les sections, les libellés et l'indicateur de tri mis en évidence

L'en-tête définit ces indicateurs d'état sur une section :

ÉtatDéfinis quand
State_RaisedToujours. L’en-tête le définit pour chaque section.
State_HorizontalIl s’agit de l’en-tête horizontal situé au-dessus de la vue.
State_SunkenLa section est enfoncée, ou la section est sélectionnée et l'option « highlightSections » est activée.
State_OnUn élément de la section est sélectionné et l'highlightSections e est activée.
State_MouseOverLa souris survole la section. À définir uniquement lorsque « sectionsClickable » est activé.

Les membres de l’ QStyleOptionHeader sont :

ÉlémentDescription
sectionL'index logique de la section.
texteLe texte de la section.
textAlignmentL'alignement du texte dans la section.
icôneL'icône de la section.
iconAlignmentL'alignement de l'icône dans la section.
positionUne valeur de type « SectionPosition » : la position de la section par rapport aux autres sections.
selectedPositionUne valeur de type « SelectedPosition » : la position de la section sélectionnée par rapport à celle-ci.
sortIndicatorUne valeur d'SortIndicator: aucun indicateur, ou la direction de la flèche de tri.
orientationIndique s'il s'agit de l'en-tête horizontal au-dessus de la vue ou de l'en-tête vertical à côté de celle-ci.

QStyleOptionHeaderV2 ajoute « textElideMode », le mode d'élision pour le texte qui ne tient pas, et « isSectionDragTarget », qui est défini sur la section sur laquelle une section glissée est sur le point d'être déposée.

Indicateurs de branches de l’arborescence

QTreeView dessine les indicateurs de branche, c’est-à-dire les lignes et les flèches qui montrent la relation entre les nœuds, à l’aide de ` PE_IndicatorBranch`. Il dessine un indicateur par niveau d’indentation devant chaque élément ; ainsi, un élément profondément imbriqué en comporte plusieurs. L’arborescence dessine également l’arrière-plan de chaque ligne à l’aide de ` PE_PanelItemViewRow ` et indente les niveaux à l’aide de ` PM_TreeViewIndentation`.

Ces deux éléments acceptent un paramètre « QStyleOptionViewItem », ce qui permet à un style de lire également la palette de couleurs, la police et l’indicateur « alternate-row » de la ligne. Le type de branche est codé dans les indicateurs d’état :

ÉtatDéfinie lorsque
State_ItemL’indicateur appartient à l’élément de cette ligne, plutôt qu’à un ancêtre. Tracez le connecteur horizontal à cet endroit.
State_ChildrenL’élément possède des enfants ; l’indicateur affiche donc une flèche d’expansion ou de réduction.
State_OpenL’élément est développé.
State_SiblingLe nœud à ce niveau possède un élément frère en dessous ; une ligne verticale se prolonge donc vers le bas.

Un indicateur ne comportant aucun de ces drapeaux est tracé pour un niveau dont le nœud n’a pas de nœud frère en dessous ; le style ne trace rien à cet endroit.

Arborescence avec des dossiers développés et rétrécis, les cellules indicatrices de branche étant surlignées et identifiées par des drapeaux correspondant à leur état

Éléments de la vue d'élément

Les délégués dessinent les éléments dans les vues d’éléments. Le délégué par défaut de Qt, QStyledItemDelegate, dessine CE_ItemViewItem à l’aide de QStyleOptionViewItem et calcule la taille de l’élément avec CT_ItemViewItem; ainsi, un style contrôle l’apparence des éléments sans délégué associé. QCommonStyle divise l’élément en plusieurs parties : l’arrière-plan, l’indicateur de sélection, la décoration, le texte et le cadre de focus :

  • CE_ItemViewItem
    • PE_PanelItemViewItem
    • PE_IndicatorItemViewItemCheck (SE_ItemViewItemCheckIndicator)
    • La décoration, dessinée avec paint() (SE_ItemViewItemDecoration)
    • Le texte, mis en page et dessiné par ` QCommonStyle ` avec élision et retour à la ligne (SE_ItemViewItemText)
    • PE_FrameFocusRect (SE_ItemViewItemFocusRect)

Les vues consultent les indications de vue d’élément telles que SH_ItemView_ShowDecorationSelected, SH_ItemView_ActivateItemOnSingleClick et SH_ItemView_ArrowKeysNavigateIntoChildren. Pour prendre en charge les types de données ou les rôles que QStyledItemDelegate ne gère pas, écrivez un délégué personnalisé ; voir Programmation modèle/vue.

Les indicateurs d’état et les membres de QStyleOptionViewItem sont décrits dans la documentation de la classe ; les plus importants sont State_Selected, State_HasFocus, checkState, decorationPosition, displayAlignment, features, icon, text et viewItemPosition.

Voir également «Référence sur le style des widgets », « Personnalisation des boutons et des widgets de saisie », « Personnalisation des conteneurs et des fenêtres » et QStyledItemDelegate.

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