QSplitter Class
Die Klasse „QSplitter“ implementiert ein Splitter-Widget. Mehr...
| Header: | #include <QSplitter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Erbt von: | QFrame |
Eigenschaften
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
Ö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 |
Neu implementierte ö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) |
Neu implementierte 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 |
Ausführliche Beschreibung
Mit einem Splitter kann der Benutzer die Größe von untergeordneten Widgets steuern, indem er die Grenze zwischen ihnen verschiebt. Ein einzelner Splitter kann eine beliebige Anzahl von Widgets steuern. Typischerweise wird ein QSplitter verwendet, um mehrere Widgets zu erstellen und diese mit insertWidget() oder addWidget() hinzuzufügen.
Das folgende Beispiel zeigt einen „ QListView “, einen „ QTreeView “ und einen „ 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);Befindet sich ein Widget bereits in einem QSplitter, wenn insertWidget() oder addWidget() aufgerufen wird, wird es an die neue Position verschoben. Dies kann genutzt werden, um Widgets im Splitter später neu anzuordnen. Mit indexOf(), widget() und count() können Sie auf die Widgets im Splitter zugreifen.
Ein standardmäßiger QSplitter ordnet seine untergeordneten Elemente horizontal (nebeneinander) an; mit ` setOrientation` (Qt::Vertical) können Sie die untergeordneten Elemente vertikal anordnen.
Standardmäßig können alle Widgets so groß oder so klein sein, wie der Benutzer es wünscht, und zwar im Bereich zwischen den Werten von ` minimumSizeHint()` (oder ` minimumSize()`) und ` maximumSize()` der jeweiligen Widgets.
QSplitter passt die Größe seiner untergeordneten Elemente standardmäßig dynamisch an. Wenn Sie möchten, dass QSplitter die Größe der untergeordneten Elemente erst am Ende eines Größenänderungsvorgangs anpasst, rufen Sie setOpaqueResize(false) auf.
Die anfängliche Verteilung der Größe zwischen den Widgets wird durch Multiplikation der Anfangsgröße mit dem Dehnungsfaktor bestimmt. Sie können auch ` setSizes()` verwenden, um die Größen aller Widgets festzulegen. Die Funktion ` sizes()` gibt die vom Benutzer festgelegten Größen zurück. Alternativ können Sie die Größen der Widgets aus einem ` QByteArray ` speichern und wiederherstellen, indem Sie ` saveState()` bzw. ` restoreState()` verwenden.
Wenn Sie ein untergeordnetes Element mit ` hide()` entfernen, wird dessen Platz auf die anderen untergeordneten Elemente verteilt. Es wird wiederhergestellt, wenn Sie es erneut mit ` show()` einfügen.
Hinweis: Das Hinzufügen eines „ QLayout “ zu einem „QSplitter“ wird nicht unterstützt (weder über „ setLayout()“ noch dadurch, dass der „QSplitter“ zum übergeordneten Element des „ QLayout “ gemacht wird); verwenden Sie stattdessen „ addWidget()“ (siehe Beispiel oben).
Sicherheitshinweise
Die Funktion ` restoreState()` deserialisiert einen versionierten Binär-Blob, der die Größen und Ausrichtung der untergeordneten Elemente des Splitters beschreibt. Die Magic Number und die Version des Formats werden validiert, die einzelnen Felder werden jedoch nicht weiter auf ihre Gültigkeit geprüft, sobald die äußere Struktur akzeptiert wurde.
Übergeben Sie an ` restoreState()` nur einen ` QByteArray `, der zuvor mit ` saveState()` erstellt und von derselben oder einer kompatiblen Version Ihrer Anwendung gespeichert wurde, typischerweise über ` QSettings`. Rufen Sie ` restoreState()` nicht mit Daten unbekannter oder nicht vertrauenswürdiger Herkunft auf, wie z. B. einer aus dem Netzwerk heruntergeladenen Datei, einer synchronisierten oder gemeinsam genutzten Konfigurationsdatei oder Daten, die von einer anderen, möglicherweise kompromittierten Anwendung bereitgestellt wurden.
Siehe auch QSplitterHandle, QHBoxLayout, QVBoxLayout und QTabWidget.
Dokumentation zu den Eigenschaften
childrenCollapsible : bool
Diese Eigenschaft legt fest, ob die Größe von untergeordneten Widgets vom Benutzer auf 0 verringert werden kann
Standardmäßig sind untergeordnete Widgets zusammenklappbar. Mit der Methode ` setCollapsible()` ist es möglich, das Zusammenklappen einzelner untergeordneter Widgets zu aktivieren oder zu deaktivieren.
Zugriffsfunktionen:
| bool | childrenCollapsible() const |
| void | setChildrenCollapsible(bool) |
Siehe auch ` setCollapsible()`.
handleWidth : int
Diese Eigenschaft enthält die Breite der Splitter-Griffe
Standardmäßig enthält diese Eigenschaft einen Wert, der von der Plattform und den Stil-Einstellungen des Benutzers abhängt.
Wenn Sie „handleWidth“ auf 1 oder 0 setzen, vergrößert sich der tatsächliche Greifbereich so, dass er sich um einige Pixel mit den jeweiligen Widgets überschneidet.
Zugriffsfunktionen:
| int | handleWidth() const |
| void | setHandleWidth(int) |
opaqueResize : bool
Gibt „ true “ zurück, wenn die Größe der Widgets während des interaktiven Verschiebens des Splitters dynamisch (undurchsichtig) angepasst wird. Andernfalls wird „ false “ zurückgegeben.
Das Standardverhalten bei der Größenanpassung ist stilabhängig (bestimmt durch den Stilhinweis SH_Splitter_OpaqueResize). Sie können es jedoch durch Aufruf von setOpaqueResize() überschreiben.
Zugriffsfunktionen:
| bool | opaqueResize() const |
| void | setOpaqueResize(bool opaque = true) |
Siehe auch QStyle::StyleHint.
orientation : Qt::Orientation
Diese Eigenschaft legt die Ausrichtung des Splitters fest
Standardmäßig ist die Ausrichtung horizontal (d. h., die Widgets werden nebeneinander angeordnet). Mögliche 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)
Erstellt einen horizontalen Splitter, wobei das Argument „ parent “ an den Konstruktor „ QFrame “ übergeben wird.
Siehe auch setOrientation().
[explicit] QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
Erstellt einen Splitter mit den angegebenen Werten für „ orientation “ und „ parent “.
Siehe auch setOrientation().
[virtual noexcept] QSplitter::~QSplitter()
Löscht den Splitter. Alle untergeordneten Elemente werden gelöscht.
void QSplitter::addWidget(QWidget *widget)
Fügt das angegebene „ widget “ nach allen anderen Elementen in das Layout des Splitters ein.
Befindet sich „ widget “ bereits im Splitter, wird es an die neue Position verschoben.
Hinweis: Der Splitter übernimmt die Eigentümerschaft an dem Widget.
Siehe auch „ insertWidget()“, „ widget()“ und „ indexOf()“.
[override virtual protected] void QSplitter::changeEvent(QEvent *ev)
Implementiert: ` QFrame::changeEvent(QEvent *ev)`.
[override virtual protected] void QSplitter::childEvent(QChildEvent *c)
Implementiert: ` QObject::childEvent` (`QChildEvent *event`).
Teilt dem Splitter mit, dass das durch ` c ` beschriebene untergeordnete Widget eingefügt oder entfernt wurde.
Diese Methode wird auch verwendet, um den Fall zu behandeln, in dem ein Widget mit dem Splitter als übergeordnetem Element erstellt, aber nicht explizit mit ` insertWidget()` oder ` addWidget()` hinzugefügt wurde. Dies dient der Kompatibilität und ist nicht die empfohlene Vorgehensweise, um Widgets in neuem Code in einen Splitter einzufügen. Bitte verwenden Sie in neuem Code ` insertWidget()` oder ` addWidget()`.
Siehe auch addWidget() und insertWidget().
[protected] int QSplitter::closestLegalPosition(int pos, int index)
Gibt die nächstgelegene zulässige Position für „ pos “ des Widgets unter „ index “ zurück.
Bei Sprachen mit Schreibrichtung von rechts nach links, wie Arabisch und Hebräisch, wird das Layout der horizontalen Trennlinien umgekehrt. Die Positionen werden dann vom rechten Rand 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 einen neuen Splitter-Handle als untergeordnetes Widget dieses Splitters zurück. Diese Funktion kann in Unterklassen neu implementiert werden, um benutzerdefinierte Handles zu unterstützen.
Siehe auch „ handle()“ und „ indexOf()“.
[override virtual protected] bool QSplitter::event(QEvent *e)
Implementiert: ` QFrame::event(QEvent *e)`.
void QSplitter::getRange(int index, int *min, int *max) const
Gibt den gültigen Bereich des Splitters unter index in *min und *max zurück, sofern min und max nicht 0 sind.
QSplitterHandle *QSplitter::handle(int index) const
Gibt den Griff links (bzw. oberhalb) des Elements im Layout des Splitters an der angegebenen Position index zurück oder nullptr, falls kein solches Element vorhanden ist. Der Griff am Index 0 ist immer ausgeblendet.
Bei Sprachen mit Schreibrichtung von rechts nach links, wie Arabisch und Hebräisch, ist das Layout horizontaler Splitter umgekehrt. Der Griff befindet sich an der Position „ index “ rechts vom Widget.
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 ab 0 nummeriert. Es gibt so viele Handles wie untergeordnete Widgets, aber das Handle an Position 0 ist immer ausgeblendet.
Siehe auch „ count()“ und „ widget()“.
void QSplitter::insertWidget(int index, QWidget *widget)
Fügt das angegebene Element „ widget “ an der angegebenen Position „ index “ in das Layout des Splitters ein.
Befindet sich „ widget “ bereits im Splitter, wird es an die neue Position verschoben.
Ist „ index “ ein ungültiger Index, wird das Widget am Ende eingefügt.
Hinweis: Der Splitter übernimmt die Eigentumsrechte am Widget.
Siehe auch addWidget(), indexOf() und widget().
bool QSplitter::isCollapsible(int index) const
Gibt „ true “ zurück, wenn das Widget unter index einklappbar ist, andernfalls „ false “.
[override virtual] QSize QSplitter::minimumSizeHint() const
Implementiert eine Zugriffsfunktion für die Eigenschaft „ QWidget::minimumSizeHint “ neu.
[protected] void QSplitter::moveSplitter(int pos, int index)
Verschiebt den linken oder oberen Rand des Trennbalken-Ziehgriffs an der Position „ index “ so nah wie möglich an die Position „ pos “, die dem Abstand vom linken oder oberen Rand des Widgets entspricht.
Bei Sprachen mit Schreibrichtung von rechts nach links, wie Arabisch und Hebräisch, wird das Layout horizontaler Splitter umgekehrt. „ pos “ ist dann der Abstand vom rechten Rand des Widgets.
Siehe auch splitterMoved(), closestLegalPosition() und getRange().
void QSplitter::refresh()
Aktualisiert den Status 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 Position „ index “ durch „ widget “.
Gibt das soeben ersetzte Widget zurück, sofern index gültig ist und widget noch kein untergeordnetes Element des Splitters ist. Andernfalls wird null zurückgegeben und es erfolgt weder ein Austausch noch eine Hinzufügung.
Die Geometrie des neu eingefügten Widgets entspricht der des Widgets, das es ersetzt. Auch dessen sichtbarer und zusammengeklappter Zustand werden übernommen.
Hinweis: Der Splitter übernimmt die Eigentümerschaft an ` widget ` und setzt das übergeordnete Element des ersetzten Widgets auf `null`.
Hinweis: Da „ widget “ über „ reparented “ in den Splitter gelangt, wird „ geometry “ möglicherweise nicht sofort gesetzt, sondern erst, nachdem „ widget “ die entsprechenden Ereignisse empfangen hat.
Siehe auch „ insertWidget()“ und „ indexOf()“.
[override virtual protected] void QSplitter::resizeEvent(QResizeEvent *)
Implementiert: ` QWidget::resizeEvent(QResizeEvent *event)`.
bool QSplitter::restoreState(const QByteArray &state)
Stellt das Layout des Splitters auf den angegebenen Wert „ state “ zurück. Gibt „ true “ zurück, wenn der Zustand wiederhergestellt wurde; andernfalls wird „ false “ zurückgegeben.
In der Regel wird dies in Verbindung mit ` QSettings ` verwendet, um die Größe aus einer früheren Sitzung wiederherzustellen. Hier ein Beispiel:
Den Zustand des Splitters wiederherstellen:
QSettings settings;
splitter->restoreState(settings.value("splitterSizes").toByteArray());Ein Fehlschlag beim Wiederherstellen des Layouts des Splitters kann auf ungültige oder veraltete Daten im übergebenen Byte-Array zurückzuführen sein.
Siehe auch ` saveState()`.
QByteArray QSplitter::saveState() const
Speichert den Zustand des Splitter-Layouts.
In der Regel wird dies in Verbindung mit ` QSettings ` verwendet, um die Größe für eine spätere Sitzung zu speichern. Als Teil der Daten wird eine Versionsnummer gespeichert. Hier ein Beispiel:
QSettings settings;
settings.setValue("splitterSizes", splitter->saveState());Siehe auch ` restoreState()`.
void QSplitter::setCollapsible(int index, bool collapse)
Legt fest, ob das unter index befindliche untergeordnete Widget auf collapse minimierbar ist.
Standardmäßig sind untergeordnete Widgets zusammenklappbar, d. h., der Benutzer kann ihre Größe auf 0 reduzieren, selbst wenn sie einen Wert ungleich Null für minimumSize() oder minimumSizeHint() haben. Dieses Verhalten kann für jedes Widget einzeln 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. Ist „ pos “ negativ, wird das Gummiband entfernt.
void QSplitter::setSizes(const QList<int> &list)
Legt die jeweiligen Größen der untergeordneten Widgets auf die in der Eigenschaft „ list “ angegebenen Werte fest.
Ist der Splitter horizontal, legen die Werte die Breite jedes Widgets in Pixeln von links nach rechts fest. Ist der Splitter vertikal, wird die Höhe jedes Widgets von oben nach unten festgelegt.
Zusätzliche Werte in der Datei „ list “ werden ignoriert. Enthält die Datei „ list “ zu wenige Werte, ist das Ergebnis undefiniert, das Programm verhält sich jedoch weiterhin korrekt.
Die Gesamtgröße des Splitter-Widgets wird davon nicht beeinflusst. Stattdessen wird jeder zusätzliche oder fehlende Platz entsprechend dem relativen Gewichtsanteil der Größen auf die Widgets verteilt.
Wenn Sie eine Größe von 0 angeben, ist das Widget unsichtbar. Die Größenrichtlinien der Widgets bleiben erhalten. Das heißt, ein Wert, der kleiner ist als der minimale Größenhinweis des jeweiligen Widgets, wird durch den Wert des Hinweises ersetzt.
Siehe auch ` sizes()`.
void QSplitter::setStretchFactor(int index, int stretch)
Aktualisiert die Größenrichtlinie des Widgets an der Position index so, dass es einen Dehnungsfaktor von stretch erhält.
stretch ist nicht der tatsächliche Streckfaktor; der tatsächliche Streckfaktor wird berechnet, indem die ursprüngliche Größe des Widgets mit stretch multipliziert wird.
Diese Funktion dient der Vereinfachung. Sie entspricht
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
Implementiert: ` QFrame::sizeHint()` const.
QList<int> QSplitter::sizes() const
Gibt eine Liste der Größenparameter aller Widgets in diesem Splitter zurück.
Wenn der Splitter horizontal ausgerichtet ist, enthält die Liste die Breiten der Widgets in Pixeln, von links nach rechts; wenn die Ausrichtung vertikal ist, enthält die Liste die Höhen der Widgets in Pixeln, von oben nach unten.
Werden diese Werte an die Funktion ` setSizes()` eines anderen Splitters übergeben, wird ein Splitter mit demselben Layout wie dieser erstellt.
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 ausgelöst, wenn der Trennbalken-Griff an einer bestimmten Stelle index in die Position pos verschoben wurde.
Bei Sprachen, die von rechts nach links geschrieben werden, wie Arabisch und Hebräisch, ist die Anordnung der horizontalen Trennzeichen 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 Position „ index “ im Layout des Splitters zurück oder „ nullptr “, falls kein solches Widget vorhanden ist.
Siehe auch „ count()“, „ handle()“, „ indexOf()“ und „ insertWidget()“.
© 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.