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
| void | activateNextSubWindow() |
| void | activatePreviousSubWindow() |
| void | cascadeSubWindows() |
| void | closeActiveSubWindow() |
| void | closeAllSubWindows() |
| void | setActiveSubWindow(QMdiSubWindow *window) |
| void | tileSubWindows() |
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.
![]() | ![]() |
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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QMdiArea::DontMaximizeSubWindowOnActivation | 0x1 | Wenn 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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QMdiArea::SubWindowView | 0 | Unterfenster mit Fensterrahmen anzeigen (Standard). |
QMdiArea::TabbedView | 1 | Unterfenster 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.
| Konstante | Wert | Beschreibung |
|---|---|---|
QMdiArea::CreationOrder | 0 | Die Fenster werden in der Reihenfolge ihrer Erstellung zurückgegeben. |
QMdiArea::StackingOrder | 1 | Die Fenster werden in der Reihenfolge ihrer Stapelung zurückgegeben, wobei das oberste Fenster an letzter Stelle in der Liste steht. |
QMdiArea::ActivationHistoryOrder | 2 | Die 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.

