Hauptfenster der Anwendung

Überblick über die Hauptfenster-Klassen

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

QDockWidget

Widget, das an ein QMainWindow angedockt werden kann oder als oberstes Fenster auf dem Desktop schwebt

QMainWindow

Hauptanwendungsfenster

QMdiArea

Bereich, in dem MDI-Fenster angezeigt werden

QMdiSubWindow

Subwindow-Klasse 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änderungshandle für die Größenänderung von Fenstern der obersten Ebene

QStatusBar

Horizontale Leiste für die Anzeige von Statusinformationen

QToolBar

Bewegliches 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 Hauptfenster-Klassen

Qt bietet die folgenden Klassen zur Verwaltung von Hauptfenstern und zugehörigen Komponenten der Benutzeroberfläche:

  • QMainWindow ist die zentrale Klasse, um die herum Anwendungen gebaut werden können. Zusammen mit den begleitenden Klassen QDockWidget und QToolBar stellt sie die oberste Ebene der Benutzeroberfläche der Anwendung dar.
  • QDockWidget bietet ein Widget, mit dem abnehmbare Werkzeugpaletten oder Hilfsfenster erstellt werden können. Dock-Widgets behalten ihre eigenen Eigenschaften im Auge und können wie externe Fenster verschoben, geschlossen und verschoben werden.
  • QToolBar bietet ein generisches Symbolleisten-Widget, das eine Reihe verschiedener aktionsbezogener Widgets enthalten kann, z. B. Schaltflächen, Dropdown-Menüs, Comboboxen und Spinboxen. Die Betonung eines einheitlichen Aktionsmodells in Qt bedeutet, dass Symbolleisten gut mit Menüs und Tastaturkürzeln zusammenarbeiten.

Beispiel-Code

Die Verwendung von QMainWindow ist ganz einfach. Im Allgemeinen untergliedern Sie die Klasse QMainWindow und richten Menüs, Symbolleisten und Docking-Widgets im QMainWindow Konstruktor ein.

Um dem Hauptfenster eine Menüleiste hinzuzufügen, erstellen Sie die Menüs und fügen sie der Menüleiste des Hauptfensters hinzu. Beachten Sie, dass die Funktion QMainWindow::menuBar() die Menüleiste beim ersten Aufruf automatisch erstellt. Sie können auch QMainWindow::setMenuBar() aufrufen, um eine eigene 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 die Aktionen erstellt wurden, können Sie sie zu den Komponenten des Hauptfensters hinzufügen. Fügen Sie sie zunächst zu den Popup-Menüs hinzu:

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

Die Klassen QToolBar und QMenu verwenden 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 bietet diese Funktion ebenfalls, so dass es einfach ist, Aktionen in verschiedenen Teilen des Hauptfensters wiederzuverwenden. Dadurch wird unnötige Doppelarbeit vermieden.

Erstellen Sie eine Symbolleiste als untergeordnetes Element des Hauptfensters, und fügen Sie 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 die oberen und unteren Symbolleistenbereiche des Hauptfensters beschränkt und wird zunächst im oberen Symbolleistenbereich platziert. Wir sehen, dass die Aktionen, die durch newAct und openAct festgelegt wurden, sowohl in der Symbolleiste als auch im Dateimenü angezeigt werden.

QDockWidget wird auf ähnliche Weise 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 im linken und rechten Dockbereich platziert werden, und es wird zunächst im linken Dockbereich platziert.

Mit der API QMainWindow können Sie festlegen, welche Dock-Widget-Bereiche die vier Ecken des Dock-Widget-Bereichs einnehmen. Bei Bedarf kann der Standardwert mit der Funktion QMainWindow::setCorner() geändert werden:

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 oberen und unteren Ecken des Hauptfensters belegen.

Sobald alle Komponenten des Hauptfensters eingerichtet sind, wird das zentrale Widget erstellt und installiert, indem ein Code ähnlich dem folgenden verwendet wird:

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

Das zentrale Widget kann eine beliebige Unterklasse von QWidget sein.

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