Auf dieser Seite

Gestaltung von Menüs und Elementansichten

Diese Seite ist Teil der Widget-Stilreferenz. Eine Erläuterung der Elementbäume, Screenshots und Tabellen finden Sie auf dieser Seite. Die allgemeinen Statusflags und Mitglieder, die jedes Widget setzt, sind unter „So zeichnet ein Stil ein Widget“ aufgeführt.

QMenu verwaltet eine Liste von Aktionen und zeichnet jede davon als Menüelement. Bei einem „Paint“-Ereignis zeichnet es zunächst den Menübereich, dann jedes Element mit „ CE_MenuItem “ und „ QStyleOptionMenuItem “ und zuletzt den Rahmen. Menüelemente haben kein separates Beschriftungselement, daher zeichnet „ CE_MenuItem “ das Häkchen, das Symbol, den Text, die Tastenkombination und den Untermenü-Pfeil.

  • PE_PanelMenu, der Hintergrund
  • CE_MenuItem, einmal pro Aktion (PM_SmallIconSize)
    • PE_IndicatorMenuCheckMark, bei einem markierten Element. Viele Stile verwenden stattdessen „ PE_IndicatorCheckBox “ und „ PE_IndicatorRadioButton “.
    • PE_IndicatorArrowRight oder „ PE_IndicatorArrowLeft “ für ein Element, das ein Untermenü öffnet
  • CE_MenuScroller (PM_MenuScrollerHeight), wenn das Menü zu hoch für den Bildschirm ist und SH_Menu_Scrollable gesetzt ist
  • CE_MenuTearoff (PM_MenuTearoffHeight), für ein „ tear-off “-Menü
  • PE_FrameMenu (PM_MenuPanelWidth), den Rahmen mit einem „ QStyleOptionFrame “, dessen „ lineWidth “ PM_MenuPanelWidth
  • CE_MenuEmptyArea, für den Bereich, der nicht von Elementen oder dem Rahmen eingenommen wird

QMenu ordnet die Elemente selbst an, unter Verwendung von PM_MenuHMargin, PM_MenuVMargin, PM_MenuPanelWidth und PM_MenuDesktopFrameWidth. Außerdem berücksichtigt er zahlreiche SH_Menu_ -Hinweise, wie beispielsweise SH_Menu_SubMenuPopupDelay, SH_Menu_MouseTracking und SH_Menu_Mask.

Menü mit einem Symbolelement, einem markierten Element, einem Untermenüelement, einem deaktivierten Element und einem einfachen Element, wobei jedes Element umrandet ist

QMenu setzt den Zustand nach dem Aufruf von ` initFrom()` zurück, sodass die Elemente nur ` State_Enabled`, ` State_Active` und die in dieser Tabelle aufgeführten Flags enthalten:

ZustandWird gesetzt, wenn
State_SelectedDas Element ist hervorgehoben und kein Trennzeichen.
State_SunkenDas Element ist gedrückt.
State_DownArrowDas Element ist ein Scrollbalken, der das Menü nach unten scrollt.
State_EnabledDie Aktion ist aktiviert. Deaktivierte Aktionen löschen dieses Flag, selbst wenn das Menü aktiviert ist.

Die Elemente von „ QStyleOptionMenuItem “ sind:

ElementBeschreibung
menuItemTypeEin Wert aus „ MenuItemType “: ein normales Menüelement, das Standardelement, ein Trennzeichen, ein Untermenü, ein Scroller, ein abtrennbares Element, ein Rand oder ein leerer Bereich.
checkTypeEin Wert aus „ CheckType “: nicht ankreuzbar, exklusiv oder nicht exklusiv.
checkedGibt an, ob das Element markiert ist.
menuHasCheckableItemsGibt an, ob mindestens ein Element im Menü markierbar ist, sodass der Stil Platz für Häkchen reservieren kann.
menuRectDas Rechteck des gesamten Menüs.
textDer Text des Menüpunkts. Ein Tabulatorzeichen trennt den Text von der Tastenkombination.
iconDas Symbol des Menüpunkts.
maxIconWidthDie Breite des breitesten Symbols im Menü.
reservedShortcutWidthDie für die Verknüpfungsspalte reservierte Breite.
fontDie Schriftart des Elementtextes.

Bei „ CE_MenuScroller “ und „ CE_MenuTearoff “ legt das Menü nur „ menuItemType “, „ checkType “, „ maxIconWidth “ und „ reservedShortcutWidth “ fest. „ CE_MenuEmptyArea “ legt außerdem „ menuRect “ fest.

QMenuBar zeichnet jeden Menütitel mit „ CE_MenuBarItem “ und einem „ QStyleOptionMenuItemV2 “, den Abstand nach dem letzten Titel mit „ CE_MenuBarEmptyArea “ und das entsprechende Feld mit „ PE_PanelMenuBar “ und einem „ QStyleOptionFrame “. Die Dropdown-Menüs sind „ QMenus“; siehe „Menüs“.

  • CE_MenuBarItem, einmal pro Menü (PM_SmallIconSize)
  • PE_PanelMenuBar (PM_MenuBarPanelWidth)
  • CE_MenuBarEmptyArea

Die Menüleiste ordnet die Elemente mit „ PM_MenuBarItemSpacing “, „ PM_MenuBarHMargin “ und „ PM_MenuBarVMargin “ an und passt ihre Größe mit „ CT_MenuBarItem “ an. Der „Painter“, den „ QMenuBar “ für das Panel übergibt, wird auf die vier Randstreifen mit einer Breite von jeweils „ PM_MenuBarPanelWidth “ beschnitten, sodass das Panel nur den Rand zeichnen kann. Der „Painter“ für den leeren Bereich wird auf den verbleibenden Platz nach Abzug der Elemente und des Randes beschnitten. Die Leiste greift auf „ SH_MenuBar_MouseTracking “, „ SH_MenuBar_AltKeyNavigation “ und „ SH_DrawMenuBarSeparator “ zurück.

Unter macOS verwendet „ QMenuBar “ standardmäßig die native Menüleiste und zeichnet nichts. Rufen Sie „ QMenuBar::setNativeMenuBar()“ auf, damit der Stil verwendet wird.

Menüleiste mit den Menüs „Datei“, „Bearbeiten“, „Ansicht“ und „Hilfe“, wobei jeder Menüpunkt und der leere Bereich umrandet sind

QMenuBar füllt die Option selbst aus, anstatt initFrom() aufzurufen. Es setzt State_Enabled, wenn die Leiste aktiviert ist, und folgende Flags für die Elemente:

StatusWird gesetzt, wenn
State_SelectedDas Menüelement ist markiert.
State_SunkenDas Menü des Elements ist geöffnet.
State_HasFocusDie Menüleiste hat den Fokus oder enthält ein aktuelles Element.
State_MouseOversich der Mauszeiger über dem Element befindet.

Die Menüleiste verwendet folgende Elemente von „ QStyleOptionMenuItem “:

ElementBeschreibung
menuRectDas Rechteck der gesamten Menüleiste.
textDer Titel des Menüs.
iconDas Symbol des Menüs. Nur wenige Stile zeichnen es.

Für das Panel ist „ QStyleOptionFrame::lineWidth “ auf „ PM_MenuBarPanelWidth “ und „ midLineWidth “ auf 0 gesetzt.

Kopfzeilen der Elementansicht

QHeaderView zeichnet jeden Kopfzeilenabschnitt mit „ CE_Header “ und „ QStyleOptionHeaderV2 “. „ QCommonStyle “ unterteilt ihn in den Abschnitts-Hintergrund, die Beschriftung und den Sortierindikator:

  • CE_Header, einmal pro Abschnitt (PM_HeaderMargin)
    • CE_HeaderSection
    • CE_HeaderLabel (SE_HeaderLabel)
    • PE_IndicatorHeaderArrow (SE_HeaderArrow, PM_HeaderMarkSize), für den sortierten Abschnitt
  • CE_HeaderEmptyArea, für den Abstand nach dem letzten Abschnitt

Die Header-Ansicht passt die Größe ihrer Abschnitte mit ` CT_HeaderSection ` an und verwendet ` PM_HeaderGripMargin ` für den Bereich, in dem der Benutzer eine Abschnittsgrenze verschieben kann. ` QTableView ` zeichnet die Schaltfläche in der oberen linken Ecke, wo sich die beiden Header treffen, als ` CE_Header`. Der Hinweis ` SH_Header_ArrowAlignment ` platziert den Sortierindikator.

Tabelle mit den Spalten „Name“, „Größe“ und „Geändert“, wobei die Spalten, Bezeichnungen und das Sortierkennzeichen umrandet sind

Die Kopfzeile setzt diese Statusflags für einen Abschnitt:

StatusGesetzt, wenn
State_RaisedImmer. Die Kopfzeile setzt ihn für jeden Abschnitt.
State_HorizontalDies ist die horizontale Kopfzeile oberhalb der Ansicht.
State_SunkenDer Abschnitt wird gedrückt oder der Abschnitt ist ausgewählt und „ highlightSections “ ist aktiviert.
State_OnEin Element im Abschnitt ist ausgewählt und „ highlightSections “ ist aktiviert.
State_MouseOverDie Maus befindet sich über dem Abschnitt. Wird nur gesetzt, wenn „ sectionsClickable “ aktiviert ist.

Die Elemente von „ QStyleOptionHeader “ sind:

ElementBeschreibung
sectionDer logische Index des Abschnitts.
textDer Text des Abschnitts.
textAlignmentDie Ausrichtung des Textes im Abschnitt.
SymbolDas Symbol des Abschnitts.
iconAlignmentDie Ausrichtung des Symbols im Abschnitt.
positionEin Wert vom Typ „ SectionPosition “: Die Position des Abschnitts relativ zu den anderen Abschnitten.
selectedPositionEin Wert vom Typ „ SelectedPosition “: Die Position des ausgewählten Abschnitts relativ zu diesem Abschnitt.
sortIndicatorEin Wert vom Typ „ SortIndicator “: kein Indikator oder die Richtung des Sortierpfeils.
orientationGibt an, ob es sich um die horizontale Kopfzeile oberhalb der Ansicht oder um die vertikale Kopfzeile daneben handelt.

QStyleOptionHeaderV2 „adds“ textElideMode, der Elidierungsmodus für Text, der nicht passt, und „ isSectionDragTarget “, der für den Abschnitt festgelegt wird, auf den ein gezogener Abschnitt abgelegt werden soll.

Anzeigen für Baumzweige

QTreeView Zeichnet die Zweigindikatoren – die Linien und Pfeile, die die Beziehung zwischen den Knoten anzeigen – mit ` PE_IndicatorBranch`. Pro Einrückungsebene wird vor jedem Element ein Indikator gezeichnet, sodass ein tief verschachteltes Element mehrere aufweist. Der Baum zeichnet außerdem den Hintergrund jeder Zeile mit ` PE_PanelItemViewRow ` und rückt die Ebenen mit ` PM_TreeViewIndentation` ein.

Beide Elemente nehmen einen „ QStyleOptionViewItem “ entgegen, sodass ein Stil auch die Palette, die Schriftart und das Feature-Flag für abwechselnde Zeilen der Zeile auslesen kann. Die Art des Zweigs wird in den Status-Flags kodiert:

StatusWird gesetzt, wenn
State_ItemDer Indikator gehört zum Element in dieser Zeile und nicht zu einem übergeordneten Element. Zeichnen Sie hier die horizontale Verbindungslinie.
State_ChildrenDas Element hat untergeordnete Elemente, daher zeigt der Indikator einen Pfeil zum Erweitern oder Reduzieren an.
State_OpenDas Element ist erweitert.
State_SiblingDer Knoten auf dieser Ebene hat ein untergeordnetes Element, daher verläuft eine vertikale Linie nach unten.

Für eine Ebene, deren Knoten kein untergeordnetes Element hat, wird ein Indikator ohne diese Markierungen gezeichnet; der Stil zeichnet dort nichts.

Baumstruktur mit ein- und ausgeblendeten Ordnern, wobei die Zellen zur Anzeige des Zweigstatus umrandet und mit den entsprechenden Statusflaggen beschriftet sind

Elemente in der Elementansicht

Delegaten zeichnen die Elemente in Elementansichten. Der Standard-Delegat von Qt, ` QStyledItemDelegate`, zeichnet ` CE_ItemViewItem ` mit ` QStyleOptionViewItem ` und berechnet die Elementgröße mit ` CT_ItemViewItem`, sodass ein Stil das Aussehen der Elemente auch ohne zugehörigen Delegaten steuert. ` QCommonStyle ` unterteilt das Element in den Hintergrund, die Kontrollanzeige, die Dekoration, den Text und den Fokusrahmen:

  • CE_ItemViewItem
    • PE_PanelItemViewItem
    • PE_IndicatorItemViewItemCheck (SE_ItemViewItemCheckIndicator)
    • Die Verzierung, gezeichnet mit paint() (SE_ItemViewItemDecoration)
    • Der Text, der von ` QCommonStyle ` mit Auslassung und Zeilenumbruch layoutet und gezeichnet wird (SE_ItemViewItemText)
    • PE_FrameFocusRect (SE_ItemViewItemFocusRect)

Die Ansichten greifen auf Hinweise zur Elementdarstellung wie SH_ItemView_ShowDecorationSelected, SH_ItemView_ActivateItemOnSingleClick und SH_ItemView_ArrowKeysNavigateIntoChildren zurück. Um Datentypen oder Rollen zu unterstützen, die QStyledItemDelegate nicht verarbeitet, schreiben Sie einen benutzerdefinierten Delegaten; siehe Modell-/Ansichtsprogrammierung.

Die Statusflags und Mitglieder von ` QStyleOptionViewItem ` sind in der Klassendokumentation beschrieben; die wichtigsten sind ` State_Selected`, ` State_HasFocus`, ` checkState`, ` decorationPosition`, ` displayAlignment`, ` features`, ` icon`, ` text` und ` viewItemPosition`.

Siehe auch „Widget-Stilreferenz“, „Gestaltung von Schaltflächen und Eingabe-Widgets“, „Gestaltung von Containern und Fenstern“ sowie „ 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.