Auf dieser Seite

QMdiArea Class

Das QMdiArea-Widget stellt einen Bereich bereit, in dem MDI-Fenster angezeigt werden. Mehr...

Überschrift: #include <QMdiArea>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Erbt von: QAbstractScrollArea

Öffentliche Typen

enum AreaOption { DontMaximizeSubWindowOnActivation }
flags AreaOptions
enum ViewMode { SubWindowView, TabbedView }
enum WindowOrder { CreationOrder, StackingOrder, ActivationHistoryOrder }

Eigenschaften

Öffentliche Funktionen

QMdiArea(QWidget *parent = nullptr)
virtual ~QMdiArea()
QMdiArea::WindowOrder activationOrder() const
QMdiSubWindow *activeSubWindow() const
QMdiSubWindow *addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())
QBrush background() const
QMdiSubWindow *currentSubWindow() const
bool documentMode() const
void removeSubWindow(QWidget *widget)
void setActivationOrder(QMdiArea::WindowOrder order)
void setBackground(const QBrush &background)
void setDocumentMode(bool enabled)
void setOption(QMdiArea::AreaOption option, bool on = true)
void setTabPosition(QTabWidget::TabPosition position)
void setTabShape(QTabWidget::TabShape shape)
void setTabsClosable(bool closable)
void setTabsMovable(bool movable)
void setViewMode(QMdiArea::ViewMode mode)
QList<QMdiSubWindow *> subWindowList(QMdiArea::WindowOrder order = CreationOrder) const
QTabWidget::TabPosition tabPosition() const
QTabWidget::TabShape tabShape() const
bool tabsClosable() const
bool tabsMovable() const
bool testOption(QMdiArea::AreaOption option) const
QMdiArea::ViewMode viewMode() const

Neu implementierte öffentliche Funktionen

virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

Öffentliche Slots

Signale

void subWindowActivated(QMdiSubWindow *window)

Neu implementierte geschützte Funktionen

virtual void childEvent(QChildEvent *childEvent) override
virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *object, QEvent *event) override
virtual void paintEvent(QPaintEvent *paintEvent) override
virtual void resizeEvent(QResizeEvent *resizeEvent) override
virtual void scrollContentsBy(int dx, int dy) override
virtual void showEvent(QShowEvent *showEvent) override
virtual void timerEvent(QTimerEvent *timerEvent) override
virtual bool viewportEvent(QEvent *event) override

Geschützte Slots

virtual void setupViewport(QWidget *viewport) override

Ausführliche Beschreibung

QMdiArea fungiert im Wesentlichen als Fenstermanager für MDI-Fenster. So zeichnet es beispielsweise die von ihm verwalteten Fenster auf sich selbst und ordnet sie kaskadierend oder nebeneinander an. QMdiArea wird üblicherweise als zentrales Widget in einem „ QMainWindow “ verwendet, um MDI-Anwendungen zu erstellen, kann aber auch in jedem beliebigen Layout platziert werden. Der folgende Code fügt einem Hauptfenster einen Bereich hinzu:

QMainWindow *mainWindow = new QMainWindow;
mainWindow->setCentralWidget(mdiArea);

Im Gegensatz zu den Fenstermanagern für Top-Level-Fenster werden alle Fensterflags (Qt::WindowFlags) von QMdiArea unterstützt, sofern die Flags vom aktuellen Widget-Stil unterstützt werden.

Unterfenster in QMdiArea sind Instanzen von ` QMdiSubWindow`. Sie werden mit ` addSubWindow()` zu einem MDI-Bereich hinzugefügt. Üblicherweise wird ein ` QWidget`, das als internes Widget festgelegt ist, an diese Funktion übergeben, es ist jedoch auch möglich, ein ` QMdiSubWindow ` direkt zu übergeben. Die Klasse erbt von „ QWidget “, und Sie können bei der Programmierung dieselbe API wie bei einem normalen Fenster der obersten Ebene verwenden. „ QMdiSubWindow “ weist zudem ein für MDI-Fenster spezifisches Verhalten auf. Weitere Details finden Sie in der Klassenbeschreibung von „ QMdiSubWindow “.

Ein Unterfenster wird aktiv, wenn es den Tastaturfokus erhält oder wenn ` setFocus()` aufgerufen wird. Der Benutzer aktiviert ein Fenster, indem er den Fokus auf die übliche Weise verschiebt. Der MDI-Bereich sendet das Signal ` subWindowActivated()` aus, wenn sich das aktive Fenster ändert, und die Funktion ` activeSubWindow()` gibt das aktive Unterfenster zurück.

Die Hilfsfunktion ` subWindowList()` gibt eine Liste aller Unterfenster zurück. Diese Information könnte beispielsweise in einem Popup-Menü verwendet werden, das eine Liste von Fenstern enthält.

Die Unterfenster werden nach dem aktuellen ` WindowOrder` sortiert. Dies wird für die Funktionen ` subWindowList()`, ` activateNextSubWindow()` und ` activatePreviousSubWindow()` verwendet. Außerdem wird es beim Kaskadieren oder Kacheln der Fenster mit ` cascadeSubWindows()` und ` tileSubWindows()` verwendet.

QMdiArea bietet zwei integrierte Layout-Strategien für Unterfenster: cascadeSubWindows() und tileSubWindows(). Beide sind Slots und lassen sich leicht mit Menüeinträgen verknüpfen.

MDI-Fenster in kaskadierender AnordnungMDI-Fenster in einem Kachelmuster

Hinweis: Die Standard-Eigenschaft für die Bildlaufleiste von QMdiArea lautet „ Qt::ScrollBarAlwaysOff “.

Siehe auch „ QMdiSubWindow “.

Dokumentation zu Mitgliedstypen

enum QMdiArea::AreaOption
flags QMdiArea::AreaOptions

Diese Enumeration beschreibt Optionen, mit denen das Verhalten des „ QMdiArea “ angepasst werden kann.

KonstanteWertBeschreibung
QMdiArea::DontMaximizeSubWindowOnActivation0x1Wenn das aktive Unterfenster maximiert ist, wird standardmäßig das nächste aktivierte Unterfenster maximiert. Setzen Sie diese Option, wenn Sie dieses Verhalten nicht wünschen.

Der Typ „AreaOptions“ ist ein `typedef` für ` QFlags<AreaOption>`. Er speichert eine ODER-Kombination von `AreaOption`-Werten.

enum QMdiArea::ViewMode

Diese Enumeration beschreibt den Anzeigemodus des Bereichs, d. h., wie die Unterfenster dargestellt werden.

KonstanteWertBeschreibung
QMdiArea::SubWindowView0Unterfenster mit Fensterrahmen anzeigen (Standard).
QMdiArea::TabbedView1Unterfenster mit Registerkarten in einer Registerkartenleiste anzeigen.

Siehe auch ` setViewMode()`.

enum QMdiArea::WindowOrder

Legt die Kriterien fest, nach denen die von ` subWindowList()` zurückgegebene Liste der untergeordneten Fenster sortiert werden soll. Die Funktionen ` cascadeSubWindows()` und ` tileSubWindows()` halten sich bei der Anordnung der Fenster an diese Reihenfolge.

KonstanteWertBeschreibung
QMdiArea::CreationOrder0Die Fenster werden in der Reihenfolge ihrer Erstellung zurückgegeben.
QMdiArea::StackingOrder1Die Fenster werden in der Reihenfolge ihrer Stapelung zurückgegeben, wobei das oberste Fenster an letzter Stelle in der Liste steht.
QMdiArea::ActivationHistoryOrder2Die Fenster werden in der Reihenfolge zurückgegeben, in der sie aktiviert wurden.

Siehe auch ` subWindowList()`.

Dokumentation der Eigenschaften

activationOrder : WindowOrder

Diese Eigenschaft enthält die Sortierkriterien für Unterfensterlisten

Diese Eigenschaft legt die Sortierkriterien für die Liste der Unterfenster fest, die von ` subWindowList()` zurückgegeben wird. Standardmäßig ist dies die Reihenfolge der Fenstererstellung.

Zugriffsfunktionen:

QMdiArea::WindowOrder activationOrder() const
void setActivationOrder(QMdiArea::WindowOrder order)

Siehe auch ` subWindowList()`.

background : QBrush

Diese Eigenschaft enthält den Hintergrundpinsel für den Arbeitsbereich

Diese Eigenschaft legt den Hintergrundpinsel für den Arbeitsbereich selbst fest. Standardmäßig ist dies eine graue Farbe, es kann jedoch jeder beliebige Pinsel sein (z. B. Farben, Farbverläufe oder Pixmaps).

Zugriffsfunktionen:

QBrush background() const
void setBackground(const QBrush &background)

documentMode : bool

Diese Eigenschaft gibt an, ob die Registerkartenleiste im Registerkartenansichtsmodus auf den Dokumentmodus eingestellt ist.

Der Dokumentmodus ist standardmäßig deaktiviert.

Zugriffsfunktionen:

bool documentMode() const
void setDocumentMode(bool enabled)

Siehe auch „ QTabBar::documentMode “ und „ setViewMode()“.

tabPosition : QTabWidget::TabPosition

Diese Eigenschaft legt die Position der Registerkarten im Registerkartenmodus fest.

Mögliche Werte für diese Eigenschaft werden durch die Enumeration „ QTabWidget::TabPosition “ beschrieben.

Zugriffsfunktionen:

QTabWidget::TabPosition tabPosition() const
void setTabPosition(QTabWidget::TabPosition position)

Siehe auch „ QTabWidget::TabPosition “ und „ setViewMode()“.

tabShape : QTabWidget::TabShape

Diese Eigenschaft legt die Form der Registerkarten im Registerkartenmodus fest.

Mögliche Werte für diese Eigenschaft sind „ QTabWidget::Rounded “ (Standard) oder „ QTabWidget::Triangular “.

Zugriffsfunktionen:

QTabWidget::TabShape tabShape() const
void setTabShape(QTabWidget::TabShape shape)

Siehe auch „ QTabWidget::TabShape “ und „ setViewMode()“.

tabsClosable : bool

Diese Eigenschaft legt fest, ob die Registerkartenleiste im Registerkartenmodus auf jeder Registerkarte Schließen-Schaltflächen anzeigen soll.

Standardmäßig lassen sich Registerkarten nicht schließen.

Zugriffsfunktionen:

bool tabsClosable() const
void setTabsClosable(bool closable)

Siehe auch „ QTabBar::tabsClosable “ und „ setViewMode()“.

tabsMovable : bool

Diese Eigenschaft legt fest, ob der Benutzer die Registerkarten im Registerkartenansichtsmodus innerhalb des Registerkartenbereichs verschieben kann.

Standardmäßig sind Registerkarten nicht verschiebbar.

Zugriffsfunktionen:

bool tabsMovable() const
void setTabsMovable(bool movable)

Siehe auch QTabBar::movable und setViewMode().

viewMode : ViewMode

Diese Eigenschaft legt fest, wie Unterfenster im „ QMdiArea “ angezeigt werden.

Standardmäßig wird die „ SubWindowView “ zur Anzeige von Unterfenstern verwendet.

Zugriffsfunktionen:

QMdiArea::ViewMode viewMode() const
void setViewMode(QMdiArea::ViewMode mode)

Siehe auch „ ViewMode“ , „ setTabShape()“ und „ setTabPosition()“.

Dokumentation zu den Mitgliedsfunktionen

QMdiArea::QMdiArea(QWidget *parent = nullptr)

Erstellt einen leeren MDI-Bereich. „ parent “ wird an den Konstruktor von „ QWidget “ übergeben.

[virtual noexcept] QMdiArea::~QMdiArea()

Löscht den MDI-Bereich.

[slot] void QMdiArea::activateNextSubWindow()

Weist den Tastaturfokus einem anderen Fenster in der Liste der untergeordneten Fenster zu. Das aktivierte Fenster ist das nächste, das durch den aktuellen activation order bestimmt wird.

Siehe auch ` activatePreviousSubWindow()` und ` QMdiArea::WindowOrder`.

[slot] void QMdiArea::activatePreviousSubWindow()

Weist den Tastaturfokus einem anderen Fenster in der Liste der untergeordneten Fenster zu. Das aktivierte Fenster ist dasjenige, das zuvor durch den aktuellen Wert von ` activation order` bestimmt wurde.

Siehe auch ` activateNextSubWindow()` und ` QMdiArea::WindowOrder`.

QMdiSubWindow *QMdiArea::activeSubWindow() const

Gibt einen Zeiger auf das derzeit aktive Unterfenster zurück. Ist derzeit kein Fenster aktiv, wird ` nullptr ` zurückgegeben.

Unterfenster werden hinsichtlich des Fensterstatus wie Fenster der obersten Ebene behandelt, d. h., wenn ein Widget außerhalb des MDI-Bereichs das aktive Fenster ist, ist kein Unterfenster aktiv. Beachten Sie, dass das Fenster aktiviert wird, wenn ein Widget in dem Fenster, in dem sich der MDI-Bereich befindet, den Fokus erhält.

Siehe auch „ setActiveSubWindow()“ und „ Qt::WindowState “.

QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())

Fügt „ widget “ als neues Unterfenster zum MDI-Bereich hinzu. Wenn „ windowFlags “ ungleich Null sind, überschreiben sie die für das Widget festgelegten Flags.

Das „ widget “ kann entweder ein „ QMdiSubWindow “ oder ein anderes „ QWidget “ sein (in diesem Fall erstellt der MDI-Bereich ein Unterfenster und legt das „ widget “ als internes Widget fest).

Hinweis: Sobald das Unterfenster hinzugefügt wurde, ist dessen übergeordnetes Element das Viewport-Widget des „ QMdiArea “.

QMdiArea mdiArea;
QMdiSubWindow *subWindow1 = new QMdiSubWindow;
subWindow1->setWidget(internalWidget1);
subWindow1->setAttribute(Qt::WA_DeleteOnClose);
mdiArea.addSubWindow(subWindow1);

QMdiSubWindow *subWindow2 =
    mdiArea.addSubWindow(internalWidget2);

Wenn Sie ein eigenes Unterfenster erstellen, müssen Sie das Widget-Attribut „ Qt::WA_DeleteOnClose “ setzen, falls das Fenster beim Schließen im MDI-Bereich gelöscht werden soll. Andernfalls wird das Fenster ausgeblendet, und der MDI-Bereich aktiviert das nächste Unterfenster nicht.

Gibt das „ QMdiSubWindow “ zurück, das dem MDI-Bereich hinzugefügt wurde.

Siehe auch ` removeSubWindow()`

[slot] void QMdiArea::cascadeSubWindows()

Ordnet alle untergeordneten Fenster kaskadenartig an.

Siehe auch ` tileSubWindows()`.

[override virtual protected] void QMdiArea::childEvent(QChildEvent *childEvent)

Implementiert: ` QObject::childEvent(QChildEvent *event)`.

[slot] void QMdiArea::closeActiveSubWindow()

Schließt das aktive Unterfenster.

Siehe auch „ closeAllSubWindows()“.

[slot] void QMdiArea::closeAllSubWindows()

Schließt alle Unterfenster, indem an jedes Fenster ein „ QCloseEvent “ gesendet wird. Möglicherweise erhalten Sie „ subWindowActivated()“-Signale von Unterfenstern, bevor diese geschlossen werden (falls der MDI-Bereich das Unterfenster aktiviert, während ein anderes geschlossen wird).

Unterfenster, die das Schließereignis ignorieren, bleiben geöffnet.

Siehe auch ` closeActiveSubWindow()`.

QMdiSubWindow *QMdiArea::currentSubWindow() const

Gibt einen Zeiger auf das aktuelle Unterfenster zurück oder „ nullptr “, falls kein aktuelles Unterfenster vorhanden ist.

Diese Funktion liefert denselben Wert wie ` activeSubWindow()`, wenn das ` QApplication `, das ` QMdiArea ` enthält, aktiv ist.

Siehe auch „ activeSubWindow()“ und „ QApplication::activeWindow()“.

[override virtual protected] bool QMdiArea::event(QEvent *event)

Umsetzt: ` QAbstractScrollArea::event(QEvent *event)`.

[override virtual protected] bool QMdiArea::eventFilter(QObject *object, QEvent *event)

Implementiert: ` QObject::eventFilter` (`QObject *watched, QEvent *event`).

[override virtual] QSize QMdiArea::minimumSizeHint() const

Implementiert: ` QAbstractScrollArea::minimumSizeHint()` const.

[override virtual protected] void QMdiArea::paintEvent(QPaintEvent *paintEvent)

Umsetzt: ` QAbstractScrollArea::paintEvent` (`QPaintEvent *event`).

void QMdiArea::removeSubWindow(QWidget *widget)

Entfernt „ widget “ aus dem MDI-Bereich. Das „ widget “ muss entweder ein „ QMdiSubWindow “ oder ein Widget sein, das das interne Widget eines Unterfensters ist. Hinweis: „ widget “ wird durch „ QMdiArea “ niemals tatsächlich gelöscht. Wird ein „ QMdiSubWindow “ übergeben, wird dessen übergeordnetes Widget auf „ nullptr “ gesetzt und es wird entfernt; wird jedoch ein internes Widget übergeben, wird das untergeordnete Widget auf „ nullptr “ gesetzt und das „ QMdiSubWindow “ wird nicht entfernt.

Siehe auch addSubWindow().

[override virtual protected] void QMdiArea::resizeEvent(QResizeEvent *resizeEvent)

Implementiert: ` QAbstractScrollArea::resizeEvent(QResizeEvent *event)`.

[override virtual protected] void QMdiArea::scrollContentsBy(int dx, int dy)

Implementiert: ` QAbstractScrollArea::scrollContentsBy(int dx, int dy)`.

[slot] void QMdiArea::setActiveSubWindow(QMdiSubWindow *window)

Aktiviert das Unterfenster „ window “. Wenn „ window “ auf „ nullptr “ gesetzt ist, wird jedes aktuell aktive Fenster deaktiviert.

Siehe auch activeSubWindow().

void QMdiArea::setOption(QMdiArea::AreaOption option, bool on = true)

Wenn „ on “ auf „true“ gesetzt ist, ist „ option “ im MDI-Bereich aktiviert; andernfalls ist es deaktiviert. Informationen zu den Auswirkungen der einzelnen Optionen finden Sie unter AreaOption.

Siehe auch „ AreaOption “ und „ testOption()“.

[override virtual protected slot] void QMdiArea::setupViewport(QWidget *viewport)

Umsetzt: QAbstractScrollArea::setupViewport(QWidget *viewport).

Dieser Slot wird von ` QAbstractScrollArea ` aufgerufen, nachdem ` setViewport()` aufgerufen wurde. Implementieren Sie diese Funktion in einer Unterklasse von ` QMdiArea ` neu, um das neue ` viewport ` vor seiner Verwendung zu initialisieren.

Siehe auch setViewport().

[override virtual protected] void QMdiArea::showEvent(QShowEvent *showEvent)

Implementiert: ` QWidget::showEvent(QShowEvent *event)`.

[override virtual] QSize QMdiArea::sizeHint() const

Implementiert: ` QAbstractScrollArea::sizeHint()` const.

[signal] void QMdiArea::subWindowActivated(QMdiSubWindow *window)

QMdiArea gibt dieses Signal aus, nachdem „ window “ aktiviert wurde. Wenn „ window “ den Wert „ nullptr “ annimmt, hat „ QMdiArea “ gerade sein zuletzt aktives Fenster deaktiviert, und es befinden sich keine aktiven Fenster auf der Arbeitsfläche.

Siehe auch QMdiArea::activeSubWindow().

QList<QMdiSubWindow *> QMdiArea::subWindowList(QMdiArea::WindowOrder order = CreationOrder) const

Gibt eine Liste aller Unterfenster im MDI-Bereich zurück. Wenn „ order “ auf „ CreationOrder “ gesetzt ist (Standard), werden die Fenster in der Reihenfolge sortiert, in der sie in den Arbeitsbereich eingefügt wurden. Wenn „ order “ auf „ StackingOrder “ gesetzt ist, werden die Fenster in ihrer Stapelreihenfolge aufgelistet, wobei das oberste Fenster als letztes Element in der Liste erscheint. Wenn „ order “ auf „ ActivationHistoryOrder “ gesetzt ist, werden die Fenster entsprechend ihrer letzten Aktivierungshistorie aufgelistet.

Siehe auch WindowOrder.

bool QMdiArea::testOption(QMdiArea::AreaOption option) const

Gibt „ true “ zurück, wenn „ option “ aktiviert ist; andernfalls wird „ false “ zurückgegeben.

Siehe auch AreaOption und setOption().

[slot] void QMdiArea::tileSubWindows()

Ordnet alle untergeordneten Fenster in einem Kachelmuster an.

Siehe auch „ cascadeSubWindows()“.

[override virtual protected] void QMdiArea::timerEvent(QTimerEvent *timerEvent)

Umsetzt: ` QObject::timerEvent(QTimerEvent *event)`.

[override virtual protected] bool QMdiArea::viewportEvent(QEvent *event)

Umsetzt: ` QAbstractScrollArea::viewportEvent(QEvent *event)`.

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