QSplitter Class
The QSplitter class implements a splitter widget. 更多...
头文件: | #include <QSplitter> |
qmake: | QT += widgets |
基类: | QFrame |
属性
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
公有函数
QSplitter(QWidget *parent = Q_NULLPTR) | |
QSplitter(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR) | |
~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 |
重新实现的公有函数
virtual QSize | minimumSizeHint() const |
virtual QSize | sizeHint() const |
- 14 个公有函数继承自 QFrame
- 214 个公有函数继承自 QWidget
- 32 个公有函数继承自 QObject
- 14 个公有函数继承自 QPaintDevice
信号
void | splitterMoved(int pos, int index) |
受保护的函数
int | closestLegalPosition(int pos, int index) |
virtual QSplitterHandle * | createHandle() |
void | moveSplitter(int pos, int index) |
void | setRubberBand(int pos) |
重新实现的受保护函数
virtual void | changeEvent(QEvent *ev) |
virtual void | childEvent(QChildEvent *c) |
virtual bool | event(QEvent *e) |
virtual void | resizeEvent(QResizeEvent *) |
- 4 个受保护的函数继承自 QFrame
- 35 个受保护的函数继承自 QWidget
- 9 个受保护的函数继承自 QObject
- 1 个受保护的函数继承自 QPaintDevice
其他继承的成员
- 19 个公有槽函数继承自 QWidget
- 1 个公有槽函数继承自 QObject
- 1 个公有变量继承自 QObject
- 5 个静态公有成员继承自 QWidget
- 10 个静态公有成员继承自 QObject
- 1 个受保护的槽函数继承自 QWidget
- 2 个受保护的变量继承自 QObject
- 1 protected type inherited from QPaintDevice
详细描述
The QSplitter class implements a splitter widget.
A splitter lets the user control the size of child widgets by dragging the boundary between them. Any number of widgets may be controlled by a single splitter. The typical use of a QSplitter is to create several widgets and add them using insertWidget() or addWidget().
The following example will show a QListView, QTreeView, and QTextEdit side by side, with two 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);
If a widget is already inside a QSplitter when insertWidget() or addWidget() is called, it will move to the new position. This can be used to reorder widgets in the splitter later. You can use indexOf(), widget(), and count() to get access to the widgets inside the splitter.
A default QSplitter lays out its children horizontally (side by side); you can use setOrientation(Qt::Vertical) to lay its children out vertically.
By default, all widgets can be as large or as small as the user wishes, between the minimumSizeHint() (or minimumSize()) and maximumSize() of the widgets.
QSplitter resizes its children dynamically by default. If you would rather have QSplitter resize the children only at the end of a resize operation, call setOpaqueResize(false).
The initial distribution of size between the widgets is determined by multiplying the initial size with the stretch factor. You can also use setSizes() to set the sizes of all the widgets. The function sizes() returns the sizes set by the user. Alternatively, you can save and restore the sizes of the widgets from a QByteArray using saveState() and restoreState() respectively.
When you hide() a child, its space will be distributed among the other children. It will be reinstated when you show() it again.
Note: Adding a QLayout to a QSplitter is not supported (either through setLayout() or making the QSplitter a parent of the QLayout); use addWidget() instead (see example above).
参见 QSplitterHandle, QHBoxLayout, QVBoxLayout, and QTabWidget.
属性
childrenCollapsible : bool
This property holds whether child widgets can be resized down to size 0 by the user
By default, children are collapsible. It is possible to enable and disable the collapsing of individual children using setCollapsible().
访问函数:
bool | childrenCollapsible() const |
void | setChildrenCollapsible(bool) |
参见 setCollapsible().
handleWidth : int
This property holds the width of the splitter handles
By default, this property contains a value that depends on the user's platform and style preferences.
If you set handleWidth to 1 or 0, the actual grab area will grow to overlap a few pixels of its respective widgets.
访问函数:
int | handleWidth() const |
void | setHandleWidth(int) |
opaqueResize : bool
This property holds whether resizing is opaque
The default resize behavior is style dependent (determined by the SH_Splitter_OpaqueResize style hint). However, you can override it by calling setOpaqueResize()
访问函数:
bool | opaqueResize() const |
void | setOpaqueResize(bool opaque = true) |
orientation : Qt::Orientation
This property holds the orientation of the splitter
By default, the orientation is horizontal (i.e., the widgets are laid out side by side). The possible orientations are Qt::Horizontal and Qt::Vertical.
访问函数:
Qt::Orientation | orientation() const |
void | setOrientation(Qt::Orientation) |
成员函数
QSplitter::QSplitter(QWidget *parent = Q_NULLPTR)
Constructs a horizontal splitter with the parent argument passed on to the QFrame constructor.
参见 setOrientation().
QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR)
Constructs a splitter with the given orientation and parent.
参见 setOrientation().
QSplitter::~QSplitter()
Destroys the splitter. All children are deleted.
void QSplitter::addWidget(QWidget *widget)
Adds the given widget to the splitter's layout after all the other items.
If widget is already in the splitter, it will be moved to the new position.
Note: The splitter takes ownership of the widget.
参见 insertWidget(), widget(), and indexOf().
[virtual protected]
void QSplitter::changeEvent(QEvent *ev)
重新实现 QWidget::changeEvent().
[virtual protected]
void QSplitter::childEvent(QChildEvent *c)
重新实现 QObject::childEvent().
Tells the splitter that the child widget described by c has been inserted or removed.
This method is also used to handle the situation where a widget is created with the splitter as a parent but not explicitly added with insertWidget() or addWidget(). This is for compatibility and not the recommended way of putting widgets into a splitter in new code. Please use insertWidget() or addWidget() in new code.
参见 addWidget() and insertWidget().
[protected]
int QSplitter::closestLegalPosition(int pos, int index)
Returns the closest legal position to pos of the widget at index.
For right-to-left languages such as Arabic and Hebrew, the layout of horizontal splitters is reversed. Positions are then measured from the right edge of the widget.
参见 getRange().
int QSplitter::count() const
Returns the number of widgets contained in the splitter's layout.
[virtual protected]
QSplitterHandle *QSplitter::createHandle()
Returns a new splitter handle as a child widget of this splitter. This function can be reimplemented in subclasses to provide support for custom handles.
[virtual protected]
bool QSplitter::event(QEvent *e)
重新实现 QObject::event().
void QSplitter::getRange(int index, int *min, int *max) const
Returns the valid range of the splitter at index in *min and *max if min and max are not 0.
QSplitterHandle *QSplitter::handle(int index) const
Returns the handle to the left (or above) for the item in the splitter's layout at the given index. The handle at index 0 is always hidden.
For right-to-left languages such as Arabic and Hebrew, the layout of horizontal splitters is reversed. The handle will be to the right of the widget at index.
参见 count(), widget(), indexOf(), createHandle(), and setHandleWidth().
int QSplitter::indexOf(QWidget *widget) const
Returns the index in the splitter's layout of the specified widget. This also works for handles.
Handles are numbered from 0. There are as many handles as there are child widgets, but the handle at position 0 is always hidden.
void QSplitter::insertWidget(int index, QWidget *widget)
Inserts the widget specified into the splitter's layout at the given index.
If widget is already in the splitter, it will be moved to the new position.
If index is an invalid index, then the widget will be inserted at the end.
Note: The splitter takes ownership of the widget.
参见 addWidget(), indexOf(), and widget().
bool QSplitter::isCollapsible(int index) const
Returns true
if the widget at index is collapsible, otherwise returns false
.
[virtual]
QSize QSplitter::minimumSizeHint() const
重新实现 QWidget::minimumSizeHint().
[protected]
void QSplitter::moveSplitter(int pos, int index)
Moves the left or top edge of the splitter handle at index as close as possible to position pos, which is the distance from the left or top edge of the widget.
For right-to-left languages such as Arabic and Hebrew, the layout of horizontal splitters is reversed. pos is then the distance from the right edge of the widget.
参见 splitterMoved(), closestLegalPosition(), and getRange().
void QSplitter::refresh()
Updates the splitter's state. You should not need to call this function.
QWidget *QSplitter::replaceWidget(int index, QWidget *widget)
Replaces the widget in the splitter's layout at the given index by widget.
Returns the widget that has just been replaced if index is valid and widget is not already a child of the splitter. Otherwise, it returns null and no replacement or addition is made.
The geometry of the newly inserted widget will be the same as the widget it replaces. Its visible and collapsed states are also inherited.
Note: The splitter takes ownership of widget and sets the parent of the replaced widget to null.
Note: Because widget gets reparented into the splitter, its geometry may not be set right away, but only after widget will receive the appropriate events.
This function was introduced in Qt 5.9.
参见 insertWidget() and indexOf().
[virtual protected]
void QSplitter::resizeEvent(QResizeEvent *)
重新实现 QWidget::resizeEvent().
bool QSplitter::restoreState(const QByteArray &state)
Restores the splitter's layout to the state specified. Returns true
if the state is restored; otherwise returns false
.
Typically this is used in conjunction with QSettings to restore the size from a past session. Here is an example:
Restore the splitter's state:
QSettings settings; splitter->restoreState(settings.value("splitterSizes").toByteArray());
A failure to restore the splitter's layout may result from either invalid or out-of-date data in the supplied byte array.
参见 saveState().
QByteArray QSplitter::saveState() const
Saves the state of the splitter's layout.
Typically this is used in conjunction with QSettings to remember the size for a future session. A version number is stored as part of the data. Here is an example:
QSettings settings; settings.setValue("splitterSizes", splitter->saveState());
参见 restoreState().
void QSplitter::setCollapsible(int index, bool collapse)
Sets whether the child widget at index is collapsible to collapse.
By default, children are collapsible, meaning that the user can resize them down to size 0, even if they have a non-zero minimumSize() or minimumSizeHint(). This behavior can be changed on a per-widget basis by calling this function, or globally for all the widgets in the splitter by setting the childrenCollapsible property.
参见 isCollapsible() and childrenCollapsible.
[protected]
void QSplitter::setRubberBand(int pos)
Displays a rubber band at position pos. If pos is negative, the rubber band is removed.
void QSplitter::setSizes(const QList<int> &list)
Sets the child widgets' respective sizes to the values given in the list.
If the splitter is horizontal, the values set the width of each widget in pixels, from left to right. If the splitter is vertical, the height of each widget is set, from top to bottom.
Extra values in the list are ignored. If list contains too few values, the result is undefined, but the program will still be well-behaved.
The overall size of the splitter widget is not affected. Instead, any additional/missing space is distributed amongst the widgets according to the relative weight of the sizes.
If you specify a size of 0, the widget will be invisible. The size policies of the widgets are preserved. That is, a value smaller than the minimal size hint of the respective widget will be replaced by the value of the hint.
参见 sizes().
void QSplitter::setStretchFactor(int index, int stretch)
Updates the size policy of the widget at position index to have a stretch factor of stretch.
stretch is not the effective stretch factor; the effective stretch factor is calculated by taking the initial size of the widget and multiplying it with stretch.
This function is provided for convenience. It is equivalent to
QWidget *widget = splitter->widget(index); QSizePolicy policy = widget->sizePolicy(); policy.setHorizontalStretch(stretch); policy.setVerticalStretch(stretch); widget->setSizePolicy(policy);
[virtual]
QSize QSplitter::sizeHint() const
重新实现 QWidget::sizeHint().
QList<int> QSplitter::sizes() const
Returns a list of the size parameters of all the widgets in this splitter.
If the splitter's orientation is horizontal, the list contains the widgets width in pixels, from left to right; if the orientation is vertical, the list contains the widgets' heights in pixels, from top to bottom.
Giving the values to another splitter's setSizes() function will produce a splitter with the same layout as this one.
Note that invisible widgets have a size of 0.
参见 setSizes().
[signal]
void QSplitter::splitterMoved(int pos, int index)
This signal is emitted when the splitter handle at a particular index has been moved to position pos.
For right-to-left languages such as Arabic and Hebrew, the layout of horizontal splitters is reversed. pos is then the distance from the right edge of the widget.
参见 moveSplitter().
QWidget *QSplitter::widget(int index) const
Returns the widget at the given index in the splitter's layout.
参见 count(), handle(), indexOf(), and insertWidget().