QSplitter Class

Die Klasse QSplitter implementiert ein Splitter-Widget. Mehr...

Kopfzeile: #include <QSplitter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Vererbungen: QFrame

Eigenschaften

Öffentliche Funktionen

QSplitter(QWidget *parent = nullptr)
QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
virtual ~QSplitter()
void addWidget(QWidget *widget)
bool childrenCollapsible() const
int count() const
void getRange(int index, int *min, int *max) const
QSplitterHandle *handle(int index) const
int handleWidth() const
int indexOf(QWidget *widget) const
void insertWidget(int index, QWidget *widget)
bool isCollapsible(int index) const
bool opaqueResize() const
Qt::Orientation orientation() const
void refresh()
QWidget *replaceWidget(int index, QWidget *widget)
bool restoreState(const QByteArray &state)
QByteArray saveState() const
void setChildrenCollapsible(bool)
void setCollapsible(int index, bool collapse)
void setHandleWidth(int)
void setOpaqueResize(bool opaque = true)
void setOrientation(Qt::Orientation)
void setSizes(const QList<int> &list)
void setStretchFactor(int index, int stretch)
QList<int> sizes() const
QWidget *widget(int index) const

Reimplementierte öffentliche Funktionen

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

Signale

void splitterMoved(int pos, int index)

Geschützte Funktionen

int closestLegalPosition(int pos, int index)
virtual QSplitterHandle *createHandle()
void moveSplitter(int pos, int index)
void setRubberBand(int pos)

Reimplementierte geschützte Funktionen

virtual void changeEvent(QEvent *ev) override
virtual void childEvent(QChildEvent *c) override
virtual bool event(QEvent *e) override
virtual void resizeEvent(QResizeEvent *) override

Detaillierte Beschreibung

Mit einem Splitter kann der Benutzer die Größe der untergeordneten Widgets durch Ziehen der Grenze zwischen ihnen steuern. Eine beliebige Anzahl von Widgets kann von einem einzigen Splitter kontrolliert werden. Die typische Verwendung eines QSplitters besteht darin, mehrere Widgets zu erstellen und sie mit insertWidget() oder addWidget() hinzuzufügen.

Das folgende Beispiel zeigt ein QListView, QTreeView und QTextEdit nebeneinander, mit zwei Splitter-Handles:

    QSplitter *splitter = new QSplitter(parent);
    QListView *listview = new QListView;
    QTreeView *treeview = new QTreeView;
    QTextEdit *textedit = new QTextEdit;
    splitter->addWidget(listview);
    splitter->addWidget(treeview);
    splitter->addWidget(textedit);

Wenn sich ein Widget bereits innerhalb eines QSplitters befindet, wenn insertWidget() oder addWidget() aufgerufen wird, wird es an die neue Position verschoben. Dies kann verwendet werden, um Widgets im Splitter später neu anzuordnen. Sie können indexOf(), widget() und count() verwenden, um Zugriff auf die Widgets innerhalb des Splitters zu erhalten.

Ein standardmäßiger QSplitter ordnet seine Kinder horizontal an (nebeneinander); Sie können setOrientation(Qt::Vertical) verwenden, um seine Kinder vertikal anzuordnen.

Standardmäßig können alle Widgets so groß oder so klein sein, wie der Benutzer es wünscht, zwischen minimumSizeHint() (oder minimumSize()) und maximumSize() der Widgets.

QSplitter passt die Größe seiner Kinder standardmäßig dynamisch an. Wenn Sie möchten, dass QSplitter die Größe der untergeordneten Widgets nur am Ende eines Größenänderungsvorgangs ändert, rufen Sie setOpaqueResize(false) auf.

Die anfängliche Größenverteilung zwischen den Widgets wird durch Multiplikation der Anfangsgröße mit dem Streckungsfaktor bestimmt. Sie können auch setSizes() verwenden, um die Größen aller Widgets festzulegen. Die Funktion sizes() gibt die vom Benutzer eingestellten Größen zurück. Alternativ können Sie die Größen der Widgets aus einer QByteArray mit saveState() und restoreState() speichern bzw. wiederherstellen.

Wenn Sie hide() ein untergeordnetes Element aufrufen, wird dessen Platz auf die anderen untergeordneten Elemente verteilt. Er wird wiederhergestellt, wenn Sie show() erneut verwenden.

Hinweis: Das Hinzufügen eines QLayout zu einem QSplitter wird nicht unterstützt (weder durch setLayout() noch dadurch, dass der QSplitter zu einem Elternteil des QLayout gemacht wird); verwenden Sie stattdessen addWidget() (siehe Beispiel oben).

Siehe auch QSplitterHandle, QHBoxLayout, QVBoxLayout, und QTabWidget.

Dokumentation der Eigenschaften

childrenCollapsible : bool

Diese Eigenschaft legt fest, ob untergeordnete Widgets vom Benutzer auf die Größe 0 verkleinert werden können.

Standardmäßig sind die untergeordneten Widgets zusammenklappbar. Es ist möglich, das Zusammenklappen einzelner untergeordneter Widgets mit setCollapsible() zu aktivieren und zu deaktivieren.

Zugriffsfunktionen:

bool childrenCollapsible() const
void setChildrenCollapsible(bool)

Siehe auch setCollapsible().

handleWidth : int

Diese Eigenschaft enthält die Breite der Splittergriffe

Standardmäßig enthält diese Eigenschaft einen Wert, der von der Plattform und den Stilvorgaben des Benutzers abhängt.

Wenn Sie handleWidth auf 1 oder 0 setzen, wird der eigentliche Greifbereich so groß, dass er einige Pixel der jeweiligen Widgets überlappt.

Zugriffsfunktionen:

int handleWidth() const
void setHandleWidth(int)

opaqueResize : bool

Gibt true zurück, wenn die Größe der Widgets dynamisch (undurchsichtig) geändert wird, während der Splitter interaktiv bewegt wird. Andernfalls wird false zurückgegeben.

Das Standardverhalten bei der Größenänderung ist stilabhängig (bestimmt durch den SH_Splitter_OpaqueResize Style-Hinweis). Sie können es jedoch durch den Aufruf von setOpaqueResize() außer Kraft setzen.

Funktionen zugreifen:

bool opaqueResize() const
void setOpaqueResize(bool opaque = true)

Siehe auch QStyle::StyleHint.

orientation : Qt::Orientation

Diese Eigenschaft bestimmt die Ausrichtung des Splitters

Standardmäßig ist die Ausrichtung horizontal (d. h. die Widgets sind nebeneinander angeordnet). Die möglichen Ausrichtungen sind Qt::Horizontal und Qt::Vertical.

Zugriffsfunktionen:

Qt::Orientation orientation() const
void setOrientation(Qt::Orientation)

Siehe auch QSplitterHandle::orientation().

Dokumentation der Mitgliedsfunktionen

[explicit] QSplitter::QSplitter(QWidget *parent = nullptr)

Konstruiert einen horizontalen Splitter mit dem Argument parent, das an den Konstruktor QFrame weitergegeben wird.

Siehe auch setOrientation().

[explicit] QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)

Konstruiert einen Splitter mit den angegebenen orientation und parent.

Siehe auch setOrientation().

[virtual noexcept] QSplitter::~QSplitter()

Zerstört den Splitter. Alle Kinder werden gelöscht.

void QSplitter::addWidget(QWidget *widget)

Fügt das angegebene widget in das Layout des Splitters nach allen anderen Elementen ein.

Wenn sich widget bereits im Splitter befindet, wird es an die neue Position verschoben.

Hinweis: Der Splitter übernimmt das Eigentum an dem Widget.

Siehe auch insertWidget(), widget(), und indexOf().

[override virtual protected] void QSplitter::changeEvent(QEvent *ev)

Reimplements: QFrame::changeEvent(QEvent *ev).

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

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

Teilt dem Splitter mit, dass das durch c beschriebene Kind-Widget eingefügt oder entfernt wurde.

Diese Methode wird auch verwendet, um die Situation zu behandeln, in der ein Widget mit dem Splitter als Elternteil erstellt, aber nicht explizit mit insertWidget() oder addWidget() hinzugefügt wurde. Dies dient der Kompatibilität und ist nicht die empfohlene Methode, um Widgets in einen Splitter in neuem Code einzufügen. Bitte verwenden Sie insertWidget() oder addWidget() in neuem Code.

Siehe auch addWidget() und insertWidget().

[protected] int QSplitter::closestLegalPosition(int pos, int index)

Liefert die nächstgelegene legale Position des Widgets auf pos unter index.

Bei Sprachen, die von rechts nach links verlaufen, wie Arabisch und Hebräisch, wird das Layout der horizontalen Trennlinien umgekehrt. Die Positionen werden dann von der rechten Kante des Widgets aus gemessen.

Siehe auch getRange().

int QSplitter::count() const

Gibt die Anzahl der Widgets zurück, die im Layout des Splitters enthalten sind.

Siehe auch widget() und handle().

[virtual protected] QSplitterHandle *QSplitter::createHandle()

Gibt ein neues Splitter-Handle als untergeordnetes Widget dieses Splitters zurück. Diese Funktion kann in Unterklassen reimplementiert werden, um Unterstützung für benutzerdefinierte Handles zu bieten.

Siehe auch handle() und indexOf().

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

Reimplements: QFrame::event(QEvent *e).

void QSplitter::getRange(int index, int *min, int *max) const

Gibt den gültigen Bereich des Splitters bei index in *min und *max zurück, wenn min und max nicht 0 sind.

QSplitterHandle *QSplitter::handle(int index) const

Gibt das Handle links von (oder über) dem Element im Layout des Splitters mit dem angegebenen index zurück, oder nullptr, wenn es kein solches Element gibt. Das Handle bei Index 0 ist immer ausgeblendet.

Bei Sprachen, die von rechts nach links geschrieben werden, wie Arabisch und Hebräisch, ist das Layout der horizontalen Splitter umgekehrt. Das Handle befindet sich rechts vom Widget unter index.

Siehe auch count(), widget(), indexOf(), createHandle(), und setHandleWidth().

int QSplitter::indexOf(QWidget *widget) const

Gibt den Index des angegebenen widget im Layout des Splitters zurück, oder -1, wenn widget nicht gefunden wird. Dies funktioniert auch für Handles.

Handles werden von 0 an nummeriert. Es gibt so viele Handles, wie es untergeordnete Widgets gibt, aber das Handle an Position 0 ist immer versteckt.

Siehe auch count() und widget().

void QSplitter::insertWidget(int index, QWidget *widget)

Fügt das angegebene widget in das Layout des Splitters an der angegebenen index ein.

Wenn sich widget bereits im Splitter befindet, wird es an die neue Position verschoben.

Wenn index ein ungültiger Index ist, wird das Widget am Ende eingefügt.

Hinweis: Der Splitter übernimmt das Eigentum an dem Widget.

Siehe auch addWidget(), indexOf(), und widget().

bool QSplitter::isCollapsible(int index) const

Gibt true zurück, wenn das Widget unter index zusammenklappbar ist, andernfalls false.

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

Reimplantiert eine Zugriffsfunktion für die Eigenschaft: QWidget::minimumSizeHint.

[protected] void QSplitter::moveSplitter(int pos, int index)

Verschiebt die linke oder obere Kante des Splittergriffs auf index so nah wie möglich an die Position pos, die den Abstand zur linken oder oberen Kante des Widgets angibt.

Bei Sprachen, die von rechts nach links verlaufen, wie Arabisch und Hebräisch, ist das Layout der horizontalen Splitter umgekehrt. pos ist dann der Abstand vom rechten Rand des Widgets.

Siehe auch splitterMoved(), closestLegalPosition(), und getRange().

void QSplitter::refresh()

Aktualisiert den Zustand des Splitters. Sie sollten diese Funktion nicht aufrufen müssen.

QWidget *QSplitter::replaceWidget(int index, QWidget *widget)

Ersetzt das Widget im Layout des Splitters an der angegebenen index durch widget.

Gibt das soeben ersetzte Widget zurück, wenn index gültig ist und widget nicht bereits ein untergeordnetes Element des Splitters ist. Andernfalls wird null zurückgegeben und es wird kein Ersatz oder Zusatz vorgenommen.

Die Geometrie des neu eingefügten Widgets ist die gleiche wie die des Widgets, das es ersetzt. Sein sichtbarer und eingeklappter Zustand wird ebenfalls vererbt.

Hinweis: Der Splitter übernimmt den Besitz von widget und setzt das Elternteil des ersetzten Widgets auf null.

Hinweis: Da widget reparented in den Splitter holt, wird sein geometry möglicherweise nicht sofort gesetzt, sondern erst, nachdem widget die entsprechenden Ereignisse erhalten hat.

Siehe auch insertWidget() und indexOf().

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

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

bool QSplitter::restoreState(const QByteArray &state)

Stellt das Layout des Splitters auf die angegebene state wieder her. Gibt true zurück, wenn der Zustand wiederhergestellt ist; andernfalls false.

Normalerweise wird dies in Verbindung mit QSettings verwendet, um die Größe aus einer vergangenen Sitzung wiederherzustellen. Hier ist ein Beispiel:

Wiederherstellen des Zustands des Splitters:

    QSettings settings;
    splitter->restoreState(settings.value("splitterSizes").toByteArray());

Wenn die Wiederherstellung des Splitter-Layouts fehlschlägt, kann dies entweder an ungültigen oder veralteten Daten im übergebenen Byte-Array liegen.

Siehe auch saveState().

QByteArray QSplitter::saveState() const

Speichert den Zustand des Layouts des Splitters.

Normalerweise wird dies in Verbindung mit QSettings verwendet, um die Größe für eine zukünftige Sitzung zu speichern. Eine Versionsnummer wird als Teil der Daten gespeichert. Hier ist ein Beispiel:

    QSettings settings;
    settings.setValue("splitterSizes", splitter->saveState());

Siehe auch restoreState().

void QSplitter::setCollapsible(int index, bool collapse)

Legt fest, ob das untergeordnete Widget unter index auf collapse zusammenklappbar ist.

Standardmäßig sind untergeordnete Widgets zusammenklappbar, was bedeutet, dass der Benutzer ihre Größe auf 0 reduzieren kann, auch wenn sie einen Wert ungleich Null haben minimumSize() oder minimumSizeHint(). Dieses Verhalten kann für jedes einzelne Widget durch Aufruf dieser Funktion oder global für alle Widgets im Splitter durch Setzen der Eigenschaft childrenCollapsible geändert werden.

Siehe auch isCollapsible() und childrenCollapsible.

[protected] void QSplitter::setRubberBand(int pos)

Zeigt ein Gummiband an der Position pos an. Wenn pos negativ ist, wird das Gummiband entfernt.

void QSplitter::setSizes(const QList<int> &list)

Setzt die jeweiligen Größen der untergeordneten Widgets auf die in list angegebenen Werte.

Wenn der Splitter horizontal ist, legen die Werte die Breite jedes Widgets in Pixel fest, von links nach rechts. Wenn der Splitter vertikal ist, wird die Höhe jedes Widgets von oben nach unten festgelegt.

Zusätzliche Werte in list werden ignoriert. Wenn list zu wenige Werte enthält, ist das Ergebnis undefiniert, aber das Programm wird sich trotzdem gut benehmen.

Die Gesamtgröße des Splitter-Widgets wird nicht beeinflusst. Stattdessen wird jeglicher zusätzliche/fehlende Platz auf die Widgets entsprechend dem relativen Gewicht der Größen verteilt.

Wenn Sie eine Größe von 0 angeben, wird das Widget unsichtbar sein. Die Größenpolitik der Widgets wird beibehalten. Das heißt, ein Wert, der kleiner als der minimale Größenhinweis des jeweiligen Widgets ist, wird durch den Wert des Hinweises ersetzt.

Siehe auch sizes().

void QSplitter::setStretchFactor(int index, int stretch)

Aktualisiert die Größenpolitik des Widgets an der Position index mit einem Streckungsfaktor von stretch.

stretch ist nicht der effektive Dehnungsfaktor; der effektive Dehnungsfaktor wird berechnet, indem man die ursprüngliche Größe des Widgets nimmt und mit stretch multipliziert.

Diese Funktion wird der Einfachheit halber bereitgestellt. Sie ist äquivalent zu

QWidget *widget = splitter->widget(index);
QSizePolicy policy = widget->sizePolicy();
policy.setHorizontalStretch(stretch);
policy.setVerticalStretch(stretch);
widget->setSizePolicy(policy);

Siehe auch setSizes() und widget().

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

Reimplements: QFrame::sizeHint() const.

QList<int> QSplitter::sizes() const

Gibt eine Liste der Größenparameter aller Widgets in diesem Splitter zurück.

Ist der Splitter horizontal ausgerichtet, enthält die Liste die Breite der Widgets in Pixeln, von links nach rechts; ist er vertikal ausgerichtet, enthält die Liste die Höhe der Widgets in Pixeln, von oben nach unten.

Die Übergabe der Werte an die Funktion setSizes() eines anderen Splitters erzeugt einen Splitter mit demselben Layout wie dieser.

Beachten Sie, dass unsichtbare Widgets eine Größe von 0 haben.

Siehe auch setSizes().

[signal] void QSplitter::splitterMoved(int pos, int index)

Dieses Signal wird ausgegeben, wenn der Splitter-Griff an einer bestimmten index an die Position pos verschoben wurde.

Bei Sprachen, die von rechts nach links verlaufen, wie Arabisch und Hebräisch, ist die Anordnung der horizontalen Splitter umgekehrt. pos ist dann der Abstand vom rechten Rand des Widgets.

Siehe auch moveSplitter().

QWidget *QSplitter::widget(int index) const

Gibt das Widget an der angegebenen Adresse index im Layout des Splitters zurück, oder nullptr, wenn es kein solches Widget gibt.

Siehe auch count(), handle(), indexOf(), und insertWidget().

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