Kapitel 31. Menüerstellung

Dieses Kapitel offenbart schrittweise, dass ein Menü kein bloßes Set von Einträgen ist, sondern ein Interaktionsszenario. Hier entdecken Sie, wie professionelle Anwendungen das Gefühl einer “nativen” Oberfläche erreichen, ohne plattformspezifische Regeln zu verletzen. Sie lernen die Geheimnisse kennen, die es ermöglichen, den Weg des Benutzers zur Aktion zu verkürzen und gleichzeitig die Code-Wartung zu vereinfachen.

Es werden mehrere Menütypen analysiert, praktische Techniken für die Arbeit mit QMenu und QMenuBar gezeigt sowie die Logik der Verwendung von Mnemonics und Hotkeys erklärt. Anhand realer Beispiele wird demonstriert, wie eine durchdachte Menüstruktur die kognitive Belastung reduziert und das Gefühl professioneller Qualität der Oberfläche erhöht.

Dieses Kapitel zu überspringen bedeutet das Risiko, auf dem Niveau “funktioniert, aber unbequem” zu bleiben. Und solche Details bemerken Benutzer am schnellsten.

Das Kapitel enthält Code-Beispiele, die sofort einsatzbereit sind.

Selbstüberprüfung zum Kapitel

Worin besteht der grundsätzliche Unterschied zwischen Hotkeys und Mnemonics (Schnellzugriffstasten)?Antwort
Richtige Antwort: Hotkeys sind globale Tastenkombinationen (z.B. Ctrl+S), die überall in der Anwendung funktionieren, während Mnemonics kontextbezogene Alt+Buchstabe-Kombinationen sind, die das vorherige Öffnen des entsprechenden Menüs erfordern.
Warum sollten Top-Level-Menübefehle nicht für die direkte Ausführung von Aktionen verwendet werden?Antwort
Richtige Antwort: Top-Level-Befehle sind ausschließlich zum Anzeigen von Dropdown-Menüs gedacht; ihre Verwendung für andere Zwecke verletzt vertraute Interface-Patterns und verwirrt Benutzer.
Was passiert mit dem &-Symbol vor einem Buchstaben im Menübefehlsnamen auf macOS?Antwort
Richtige Antwort: Das &-Symbol wird einfach aus dem Text entfernt, da macOS aufgrund des Plattformdesigns keine Mnemonics unterstützt; Unterstreichungen in Menüeinträgen werden nicht angezeigt, und die Navigation über Alt+Buchstabe funktioniert nicht.
Welche Rolle spielt die Klasse QAction im Qt-Menüsystem?Antwort
Richtige Antwort: QAction repräsentiert einen einzelnen Befehl (Aktion) im Menü, kapselt dessen Eigenschaften (Text, Icon, Hotkeys, Status) und kann an verschiedenen Stellen der Oberfläche wiederverwendet werden (Menü, Toolbars).
Warum wird empfohlen, die Verschachtelungstiefe von Submenüs auf maximal zwei Ebenen zu beschränken?Antwort
Richtige Antwort: Tiefe Verschachtelung erschwert die Navigation und macht das Menü für Benutzer weniger verständlich; zwei Ebenen sind die optimale Balance zwischen Befehlsorganisation und Benutzerfreundlichkeit.
Warum werden in Windows 10 und 11 Mnemonic-Unterstreichungen standardmäßig nicht angezeigt, auch nicht beim Drücken von Alt?Antwort
Richtige Antwort: Microsoft hat das visuelle Interface-Design für mehr Klarheit weiterentwickelt, während die Funktionalität der Alt+Buchstabe-Mnemonics unabhängig von der visuellen Darstellung vollständig erhalten bleibt.
Welche Methode muss aufgerufen werden, um ein Kontextmenü an der richtigen Position bei Rechtsklick anzuzeigen?Antwort
Richtige Antwort: Man muss menu->exec(event->globalPos()) in der Methode contextMenuEvent() aufrufen und dabei die globalen Mauskoordinaten aus dem Event-Objekt übergeben.
Wie macht man einen Menübefehl inaktiv (grau angezeigt)?Antwort
Richtige Antwort: Über den Pointer auf QAction die Methode setEnabled(false) aufrufen, was den Befehl visuell grau darstellt und dessen Ausführung blockiert.
Warum fügt man Auslassungspunkte am Ende eines Menübefehlsnamens hinzu?Antwort
Richtige Antwort: Auslassungspunkte signalisieren dem Benutzer, dass die Auswahl des Befehls einen Dialog für zusätzliche Aktionen öffnet; dies gilt nicht für einfache Message-Boxen.
Was gibt die Methode addAction() nach dem Hinzufügen eines Befehls zum Menü zurück?Antwort
Richtige Antwort: Die Methode gibt einen Pointer auf das QAction-Objekt zurück, über den man die Befehlseigenschaften konfigurieren kann (Checkbox, Icon, Verfügbarkeit, Hotkeys).
Worin unterscheidet sich ein Kontextmenü grundsätzlich von einem Popup-Menü in Qt?Antwort
Richtige Antwort: Das Kontextmenü verwendet dieselbe QMenu-Klasse, wird aber nicht an QMenuBar angehängt, sondern über exec() bei der Behandlung des Rechtsklick-Events angezeigt.
Welches Signal sendet das Menü bei Auswahl eines beliebigen Befehls durch den Benutzer, und was überträgt es?Antwort
Richtige Antwort: Das Menü sendet das Signal triggered(QAction*), das einen Pointer auf das Action-Objekt des gewählten Befehls überträgt, was die Identifizierung des Befehls in einem Slot ermöglicht.
Warum passt Qt die Mnemonic-Anzeige automatisch an das jeweilige Betriebssystem an?Antwort
Richtige Antwort: Verschiedene Betriebssysteme haben unterschiedliche Konventionen zur Anzeige von Zugriffstasten; die automatische Anpassung gewährleistet ein natives Erscheinungsbild der Anwendung und entspricht den Erwartungen der Benutzer jeder Plattform.

Praktische Aufgaben

Einfaches Niveau

Menü zur Textformatierung
Erstellen Sie eine Anwendung mit einem Textfeld (QTextEdit) und einem Menü “Format” mit Befehlen zur Textformatierung: Fett, Kursiv, Unterstrichen. Jeder Befehl sollte eine Checkbox haben, die den aktuellen Status widerspiegelt. Fügen Sie Hotkeys hinzu: Ctrl+B, Ctrl+I, Ctrl+U entsprechend. Fügen Sie einen Separator und den Befehl “Formatierung zurücksetzen” am Ende hinzu.
Hinweise: Verwenden Sie QMenuBar und QMenu. Für Checkboxen rufen Sie setCheckable(true) bei den QAction-Objekten auf. QTextEdit-Methoden: setFontWeight(), setFontItalic(), setFontUnderline(). Zum Zurücksetzen erstellen Sie ein neues QTextCharFormat und wenden es über setCurrentCharFormat() an.

Mittleres Niveau

Editor mit Kontextmenü und Farbschemata
Entwickeln Sie einen Texteditor mit Top-Level-Menü “Datei” (Neu, Öffnen, Speichern, Beenden) und einem Kontextmenü zum Ändern des Farbschemas. Bei Rechtsklick auf das Textfeld soll ein Menü mit Submenü “Theme” erscheinen, das Varianten enthält: Hell, Dunkel, Blau. Die Theme-Auswahl soll Hintergrund- und Textfarben ändern. Fügen Sie Mnemonics für alle Befehle und Standard-Hotkeys für Dateimenübefehle hinzu.
Hinweise: Überschreiben Sie contextMenuEvent(). Erstellen Sie ein Submenü über addMenu(). Verwenden Sie QPalette zum Ändern der Farben oder setStyleSheet(). Das triggered()-Signal überträgt QAction*, aus dem man text() zur Bestimmung des gewählten Themes abrufen kann. Vergessen Sie nicht, Auslassungspunkte zu “Öffnen…” und “Speichern…” hinzuzufügen.

Schwieriges Niveau

Dynamisches Menü für kürzlich verwendete Dateien
Erstellen Sie eine Anwendung zur Bildbetrachtung mit vollständigem Menü. Implementieren Sie ein dynamisches Submenü “Zuletzt verwendet” im “Datei”-Menü, das die letzten 5 geöffneten Dateien speichert. Bei Auswahl einer Datei aus der Liste soll sie geöffnet werden. Die Liste soll bei jedem Öffnen einer neuen Datei aktualisiert werden (neueste oben). Wenn eine Datei bereits in der Liste ist, verschieben Sie sie nach oben. Fügen Sie den Befehl “Liste leeren” am Ende des Submenüs hinzu. Befehle für kürzlich verwendete Dateien sollen inaktiv sein, wenn die Datei von der Festplatte gelöscht wurde. Speichern Sie die Liste zwischen Anwendungsstarts.
Hinweise: Verwenden Sie QSettings zum Speichern der Dateiliste (QStringList). Erstellen Sie einen Slot zum Aktualisieren des Submenüs, der bei jedem Dateiöffnen aufgerufen wird. Prüfen Sie die Dateiexistenz über QFile::exists(). Für das dynamische Menü verwenden Sie clear() und fügen Actions neu hinzu. Verbinden Sie jede Action mit einem Slot, der den Dateipfad über QAction::setData() und sender() überträgt. QFileDialog für Dateiauswahl, QLabel mit QPixmap für Bildanzeige.

💬 Beteiligen Sie sich an der Diskussion!

Haben Sie die Menüerstellung in Qt gemeistert? Haben Sie Fragen zu den Unterschieden zwischen Hotkeys und Mnemonics?

Vielleicht haben Sie Ideen zur Organisation komplexer Menüs oder sind auf Besonderheiten des Verhaltens von Kontextmenüs auf verschiedenen Plattformen gestoßen?

Teilen Sie Ihre Erfahrungen, stellen Sie Fragen oder helfen Sie anderen Lesern, die Feinheiten der Arbeit mit QMenu und QMenuBar zu meistern!

Leave a Reply

Your email address will not be published. Required fields are marked *