QMdiArea Class

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

Kopfzeile: #include <QMdiArea>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Vererbungen: 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

Reimplementierte öffentliche Funktionen

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

Öffentliche Slots

Signale

void subWindowActivated(QMdiSubWindow *window)

Reimplementierte 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 Steckplätze

virtual void setupViewport(QWidget *viewport) override

Detaillierte Beschreibung

QMdiArea funktioniert im Wesentlichen wie ein Fenstermanager für MDI-Fenster. Zum Beispiel zeichnet es die Fenster, die es verwaltet, auf sich selbst und ordnet sie in einem kaskadierenden oder kachelartigen Muster an. QMdiArea wird üblicherweise als zentrales Widget in einem QMainWindow verwendet, um MDI-Anwendungen zu erstellen, kann aber auch in jedem anderen Layout platziert werden. Der folgende Code fügt einen Bereich zu einem Hauptfenster 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, solange die Flags vom aktuellen Widgetstil unterstützt werden. Wenn ein bestimmtes Flag vom Stil nicht unterstützt wird (z. B. WindowShadeButtonHint), können Sie das Fenster trotzdem mit showShaded() schattieren.

Unterfenster in QMdiArea sind Instanzen von QMdiSubWindow. Sie werden mit addSubWindow() zu einem MDI-Bereich hinzugefügt. Es ist üblich, dieser Funktion ein QWidget zu übergeben, das als internes Widget festgelegt wird, aber es ist auch möglich, ein QMdiSubWindow direkt zu übergeben. Die Klasse erbt QWidget, und Sie können bei der Programmierung die gleiche API wie bei einem normalen Top-Level-Fenster verwenden. QMdiSubWindow hat auch ein Verhalten, das spezifisch für MDI-Fenster ist. Siehe die Beschreibung der Klasse QMdiSubWindow für weitere Details.

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 gibt das Signal subWindowActivated() aus, wenn sich das aktive Fenster ändert, und die Funktion activeSubWindow() gibt das aktive Teilfenster zurück.

Die Komfortfunktion subWindowList() gibt eine Liste aller Unterfenster zurück. Diese Information könnte z.B. in einem Popup-Menü mit einer Liste von Fenstern verwendet werden.

Die Unterfenster werden nach dem aktuellen WindowOrder sortiert. Dies wird für subWindowList() und für activateNextSubWindow() und activatePreviousSubWindow() verwendet. Sie wird auch beim Kaskadieren oder Kacheln der Fenster mit cascadeSubWindows() und tileSubWindows() verwendet.

QMdiArea bietet zwei eingebaute Layoutstrategien für Unterfenster: cascadeSubWindows() und tileSubWindows(). Beide sind Slots und lassen sich leicht mit Menüeinträgen verbinden.

Hinweis: Die Standard-Scrollbar-Eigenschaft für QMdiArea ist Qt::ScrollBarAlwaysOff.

Siehe auch QMdiSubWindow.

Dokumentation der Mitgliedstypen

enum QMdiArea::AreaOption
flags QMdiArea::AreaOptions

Diese Aufzählung beschreibt Optionen, mit denen das Verhalten von QMdiArea angepasst werden kann.

KonstanteWertBeschreibung
QMdiArea::DontMaximizeSubWindowOnActivation0x1Wenn das aktive Teilfenster maximiert wird, wird standardmäßig das nächste Teilfenster maximiert, das aktiviert wird. 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 Aufzählung beschreibt den Ansichtsmodus des Bereichs, d.h. wie die Unterfenster angezeigt werden.

KonstanteWertBeschreibung
QMdiArea::SubWindowView0Anzeige von Unterfenstern mit Fensterrahmen (Standard).
QMdiArea::TabbedView1Unterfenster mit Tabs in einer Tab-Leiste anzeigen.

Siehe auch setViewMode().

enum QMdiArea::WindowOrder

Gibt die Kriterien an, nach denen die von subWindowList() zurückgegebene Liste der untergeordneten Fenster geordnet werden soll. Die Funktionen cascadeSubWindows() und tileSubWindows() folgen dieser Reihenfolge beim Anordnen der Fenster.

KonstanteWertBeschreibung
QMdiArea::CreationOrder0Die Fenster werden in der Reihenfolge ihrer Erstellung zurückgegeben.
QMdiArea::StackingOrder1Die Fenster werden in der Reihenfolge zurückgegeben, in der sie gestapelt sind, wobei das oberste Fenster als letztes in der Liste erscheint.
QMdiArea::ActivationHistoryOrder2Die Fenster werden in der Reihenfolge zurückgegeben, in der sie aktiviert wurden.

Siehe auch subWindowList().

Dokumentation der Eigenschaft

activationOrder : WindowOrder

Diese Eigenschaft enthält die Ordnungskriterien für Unterfensterlisten

Diese Eigenschaft legt die Ordnungskriterien für die Liste der Unterfenster fest, die von subWindowList() zurückgegeben wird. Standardmäßig ist es 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

Mit dieser Eigenschaft wird der Hintergrundpinsel für den Arbeitsbereich selbst festgelegt. Standardmäßig ist dies eine graue Farbe, es kann aber auch ein beliebiger 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 in der Registerkartenansicht 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 enthält die Position der Registerkarten im Modus "Registerkartenansicht".

Die möglichen Werte für diese Eigenschaft werden durch die Aufzählung QTabWidget::TabPosition beschrieben.

Zugriffsfunktionen:

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

Siehe auch QTabWidget::TabPosition und setViewMode().

tabShape : QTabWidget::TabShape

Diese Eigenschaft bestimmt die Form der Registerkarten im Modus "Registerkartenansicht".

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 in der Registerkartenansicht Schaltflächen zum Schließen auf jeder Registerkarte platzieren soll.

Standardmäßig sind die Registerkarten nicht schließbar.

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 innerhalb des Bereichs der Registerkartenleiste in der Registerkartenansicht verschieben kann.

Standardmäßig sind die Tabulatoren nicht verschiebbar.

Zugriffsfunktionen:

bool tabsMovable() const
void setTabsMovable(bool movable)

Siehe auch QTabBar::movable und setViewMode().

viewMode : ViewMode

Diese Eigenschaft bestimmt die Art und Weise, wie die Unterfenster in QMdiArea angezeigt werden.

Standardmäßig wird SubWindowView für die Anzeige von Unterfenstern verwendet.

Zugriffsfunktionen:

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

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

Dokumentation der Mitgliedsfunktionen

QMdiArea::QMdiArea(QWidget *parent = nullptr)

Konstruiert einen leeren mdi-Bereich. parent wird an den Konstruktor von QWidget übergeben.

[virtual noexcept] QMdiArea::~QMdiArea()

Zerstört den MDI-Bereich.

[slot] void QMdiArea::activateNextSubWindow()

Gibt den Tastaturfokus an ein anderes Fenster in der Liste der untergeordneten Fenster. Das aktivierte Fenster wird das nächste sein, das durch das aktuelle activation order bestimmt wird.

Siehe auch activatePreviousSubWindow() und QMdiArea::WindowOrder.

[slot] void QMdiArea::activatePreviousSubWindow()

Gibt den Tastaturfokus an ein anderes Fenster in der Liste der untergeordneten Fenster. Das aktivierte Fenster ist das vorherige, das durch das aktuelle activation order bestimmt wird.

Siehe auch activateNextSubWindow() und QMdiArea::WindowOrder.

QMdiSubWindow *QMdiArea::activeSubWindow() const

Gibt einen Zeiger auf das aktuell aktive Teilfenster zurück. Wenn kein Fenster aktiv ist, wird nullptr zurückgegeben.

Unterfenster werden in Bezug auf den Fensterstatus wie Top-Level-Fenster behandelt, d.h. wenn ein Widget außerhalb des MDI-Bereichs das aktive Fenster ist, wird kein Unterfenster aktiv sein. 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 ist, überschreibt es die auf dem Widget gesetzten Flags.

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

Hinweis: Sobald das Subfenster hinzugefügt wurde, ist sein Elternteil 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 Ihr eigenes Teilfenster erstellen, müssen Sie das Attribut Qt::WA_DeleteOnClose widget setzen, wenn Sie möchten, dass das Fenster beim Schließen im MDI-Bereich gelöscht wird. Andernfalls wird das Fenster ausgeblendet und der MDI-Bereich aktiviert nicht das nächste Teilfenster.

Gibt die QMdiSubWindow zurück, die dem MDI-Bereich hinzugefügt wird.

Siehe auch removeSubWindow().

[slot] void QMdiArea::cascadeSubWindows()

Ordnet alle untergeordneten Fenster in einem Kaskadenmuster an.

Siehe auch tileSubWindows().

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

Reimplements: QObject::childEvent(QChildEvent *event).

[slot] void QMdiArea::closeActiveSubWindow()

Schließt das aktive Teilfenster.

Siehe auch closeAllSubWindows().

[slot] void QMdiArea::closeAllSubWindows()

Schließt alle Unterfenster durch Senden eines QCloseEvent an jedes Fenster. Sie können subWindowActivated()-Signale von Unterfenstern erhalten, bevor diese geschlossen werden (wenn 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, wenn es kein aktuelles Unterfenster gibt.

Diese Funktion gibt das Gleiche zurück wie activeSubWindow(), wenn QApplication, das QMdiArea enthält, aktiv ist.

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

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

Reimplements: QAbstractScrollArea::event(QEvent *Event).

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

Reimplements: QObject::eventFilter(QObject *watched, QEvent *event).

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

Reimplements: QAbstractScrollArea::minimumSizeHint() const.

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

Reimplements: 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. Beachten Sie, dass widget niemals tatsächlich von QMdiArea gelöscht wird. Wenn ein QMdiSubWindow übergeben wird, wird sein übergeordnetes Widget auf nullptr gesetzt und entfernt; wenn jedoch ein internes Widget übergeben wird, wird das untergeordnete Widget auf nullptr gesetzt und QMdiSubWindow wird nicht entfernt.

Siehe auch addSubWindow().

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

Reimplements: QAbstractScrollArea::resizeEvent(QResizeEvent *event).

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

Reimplements: QAbstractScrollArea::scrollContentsBy(int dx, int dy).

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

Aktiviert das Unterfenster window. Wenn window gleich nullptr ist, wird jedes derzeit aktive Fenster deaktiviert.

Siehe auch activeSubWindow().

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

Wenn on wahr ist, ist option für den MDI-Bereich aktiviert; andernfalls ist sie deaktiviert. Siehe AreaOption für die Auswirkungen der einzelnen Optionen.

Siehe auch AreaOption und testOption().

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

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

Dieser Slot wird von QAbstractScrollArea aufgerufen, nachdem setViewport() aufgerufen wurde. Reimplementieren Sie diese Funktion in einer Unterklasse von QMdiArea, um die neue viewport zu initialisieren, bevor sie verwendet wird.

Siehe auch setViewport().

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

Reimplements: QWidget::showEvent(QShowEvent *event).

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

Reimplements: QAbstractScrollArea::sizeHint() const.

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

QMdiArea gibt dieses Signal aus, nachdem window aktiviert wurde. Wenn window nullptr ist, hat QMdiArea gerade sein letztes aktives Fenster deaktiviert, und es gibt 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 gleich CreationOrder ist (Standardeinstellung), werden die Fenster in der Reihenfolge sortiert, in der sie in den Arbeitsbereich eingefügt wurden. Wenn order gleich StackingOrder ist, werden die Fenster in ihrer Stapelreihenfolge aufgelistet, wobei das oberste Fenster das letzte Element in der Liste ist. Wenn order gleich ActivationHistoryOrder ist, werden die Fenster entsprechend ihrer jüngsten 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)

Reimplements: QObject::timerEvent(QTimerEvent *event).

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

Reimplements: QAbstractScrollArea::viewportEvent(QEvent *Event).

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