Auf dieser Seite

Hauptfenster der Anwendung

Übersicht über die Klassen für das Hauptfenster

Diese Klassen bieten alles, was Sie für ein typisches modernes Hauptanwendungsfenster benötigen, wie beispielsweise das Hauptfenster selbst, Menü- und Symbolleisten sowie eine Statusleiste.

QDockWidget

Widget, das in einem QMainWindow angedockt oder als freistehendes Fenster auf dem Desktop angezeigt werden kann

QMainWindow

Hauptanwendungsfenster

QMdiArea

Bereich, in dem MDI-Fenster angezeigt werden

QMdiSubWindow

Unterfensterklasse für QMdiArea

QMenu

Menü-Widget zur Verwendung in Menüleisten, Kontextmenüs und anderen Popup-Menüs

QMenuBar

Horizontale Menüleiste

QSizeGrip

Größenänderungsgriff zum Ändern der Größe von Fenstern der obersten Ebene

QStatusBar

Horizontale Leiste zur Darstellung von Statusinformationen

QToolBar

Verschiebbares Panel, das eine Reihe von Steuerelementen enthält

QWidgetAction

Erweitert QAction um eine Schnittstelle zum Einfügen benutzerdefinierter Widgets in aktionsbasierte Container, wie z. B. Symbolleisten

Die Hauptfensterklassen

Qt stellt die folgenden Klassen zur Verwaltung von Hauptfenstern und zugehörigen Benutzeroberflächenkomponenten bereit:

  • QMainWindow ist die zentrale Klasse, um die herum Anwendungen aufgebaut werden können. Zusammen mit den zugehörigen Klassen „ QDockWidget “ und „ QToolBar “ stellt sie die oberste Ebene der Benutzeroberfläche der Anwendung dar.
  • QDockWidget bietet ein Widget, mit dem abtrennbare Werkzeugpaletten oder Hilfsfenster erstellt werden können. Dock-Widgets verwalten ihre eigenen Eigenschaften und können verschoben, geschlossen und als externe Fenster frei positioniert werden.
  • QToolBar bietet ein generisches Symbolleisten-Widget, das eine Reihe verschiedener aktionsbezogener Widgets enthalten kann, wie beispielsweise Schaltflächen, Dropdown-Menüs, Kombinationsfelder und Drehfelder. Die Betonung eines einheitlichen Aktionsmodells in Qt bedeutet, dass Symbolleisten gut mit Menüs und Tastaturkürzeln zusammenarbeiten.

Beispielcode

Die Verwendung von ` QMainWindow ` ist unkompliziert. Im Allgemeinen erstellen Sie eine Unterklasse von ` QMainWindow ` und richten Menüs, Symbolleisten und Dock-Widgets innerhalb des Konstruktors ` QMainWindow ` ein.

Um dem Hauptfenster eine Menüleiste hinzuzufügen, erstellen Sie die Menüs und fügen Sie diese der Menüleiste des Hauptfensters hinzu. Beachten Sie, dass die Funktion ` QMainWindow::menuBar()` beim ersten Aufruf automatisch die Menüleiste erstellt. Sie können auch ` QMainWindow::setMenuBar()` aufrufen, um eine benutzerdefinierte Menüleiste im Hauptfenster zu verwenden.

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ...
    newAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentNew),
                         tr("&New"), this);
    newAct->setShortcuts(QKeySequence::New);
    newAct->setStatusTip(tr("Create a new file"));
    connect(newAct, &QAction::triggered, this, &MainWindow::newFile);

    openAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen),
                          tr("&Open..."), this);
    openAct->setShortcuts(QKeySequence::Open);
    openAct->setStatusTip(tr("Open an existing file"));
    connect(openAct, &QAction::triggered, this, &MainWindow::open);
    ...

Sobald Aktionen erstellt wurden, können Sie diese den Komponenten des Hauptfensters hinzufügen. Fügen Sie sie zunächst den Popup-Menüs hinzu:

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAct);
    fileMenu->addAction(openAct);
    ...
    fileMenu->addSeparator();
    ...

Die Klassen ` QToolBar ` und ` QMenu ` nutzen das Aktionssystem von Qt, um eine einheitliche API bereitzustellen. Im obigen Code wurden einige vorhandene Aktionen mit der Funktion `QMenu::addAction()` zum Dateimenü hinzugefügt. ` QToolBar ` stellt diese Funktion ebenfalls bereit, wodurch sich Aktionen in verschiedenen Bereichen des Hauptfensters leicht wiederverwenden lassen. So wird unnötige Doppelarbeit vermieden.

Erstellen Sie eine Symbolleiste als untergeordnetes Element des Hauptfensters und fügen Sie ihr die gewünschten Aktionen hinzu:

fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
fileToolBar->addAction(openAct);
    ...
fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
addToolBar(Qt::TopToolBarArea, fileToolbar);

In diesem Beispiel ist die Symbolleiste auf den oberen und unteren Symbolleistenbereich des Hauptfensters beschränkt und wird zunächst im oberen Symbolleistenbereich platziert. Wir sehen, dass die durch ` newAct ` und ` openAct ` angegebenen Aktionen sowohl in der Symbolleiste als auch im Dateimenü angezeigt werden.

QDockWidget wird ähnlich wie QToolBar verwendet. Sie erstellen ein Dock-Widget als untergeordnetes Element des Hauptfensters und fügen Widgets als untergeordnete Elemente des Dock-Widgets hinzu:

contentsWindow = new QDockWidget(tr("Table of Contents"), this);
contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea
                              | Qt::RightDockWidgetArea);
addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);

headingList = new QListWidget(contentsWindow);
contentsWindow->setWidget(headingList);

In diesem Beispiel kann das Dock-Widget nur in den linken und rechten Dock-Bereichen platziert werden und befindet sich zunächst im linken Dock-Bereich.

Mit der „ QMainWindow “-API können Sie festlegen, welche Dock-Widget-Bereiche die vier Ecken des Dock-Widget-Bereichs einnehmen. Bei Bedarf lässt sich die Standardeinstellung mit der Funktion „ QMainWindow::setCorner()“ ändern:

setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);

Das folgende Diagramm zeigt die durch den obigen Code erzeugte Konfiguration. Beachten Sie, dass die linken und rechten Dock-Widgets in diesem Layout die obere und untere Ecke des Hauptfensters einnehmen.

Anordnung von Dock-Fenstern relativ zu einem zentralen Widget

Sobald alle Komponenten des Hauptfensters eingerichtet sind, wird das zentrale Widget mithilfe eines Codes ähnlich dem folgenden erstellt und eingebunden:

QWidget *centralWidget = new QWidget(this);
setCentralWidget(centralWidget);

Das zentrale Widget kann eine beliebige Unterklasse von ` QWidget` sein.

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