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