QSplitter 類

The QSplitter class implements a splitter widget. 更多...

頭: #include <QSplitter>
qmake: QT += widgets
繼承: QFrame

特性

公共函數

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

信號

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 * )

額外繼承成員

詳細描述

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 () 或 addWidget ().

以下範例將展示 QListView , QTreeView ,和 QTextEdit 並排,采用 2 個分割器手柄:

    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 insertWidget () 或 addWidget () 被調用,將把它移到新位置。這可以用於稍後在分割器中,重新排序 Widget。可以使用 indexOf (), widget (),和 count () 以訪問分割器內的 Widget。

A default QSplitter lays out its children horizontally (side by side); you can use setOrientation ( Qt::Vertical ) 以垂直布置其子級。

By default, all widgets can be as large or as small as the user wishes, between the minimumSizeHint () (或 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 使用 saveState () 和 restoreState () 分彆。

When you hide () a child, its space will be distributed among the other children. It will be reinstated when you show () 它再次。

注意: 添加 QLayout QSplitter is not supported (either through setLayout () or making the QSplitter a parent of the QLayout );使用 addWidget () 代替 (見以上範例)。

另請參閱 QSplitterHandle , QHBoxLayout , QVBoxLayout ,和 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

此特性保持分割器手柄的寬度

默認情況下,此特性包含從屬用戶平颱和樣式首選項的值。

若將 handleWidth 設為 1 (或 0),實際抓取區域將增長到其各自 Widget 的幾個重疊像素。

訪問函數:

int handleWidth () const
void setHandleWidth ( int )

opaqueResize : bool

This property holds whether resizing is opaque

默認重置大小行為從屬樣式 (由 SH_Splitter_OpaqueResize 樣式提示確定)。不管怎樣,可以覆蓋它通過調用 setOpaqueResize()

訪問函數:

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

另請參閱 QStyle::StyleHint .

orientation : Qt::Orientation

此特性保持分割器的取嚮

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 )

另請參閱 QSplitterHandle::orientation ().

成員函數文檔編製

QSplitter:: QSplitter ( QWidget * parent = Q_NULLPTR)

構造水平分割器按 parent 自變量被傳遞給 QFrame 構造函數。

另請參閱 setOrientation ().

QSplitter:: QSplitter ( Qt::Orientation orientation , QWidget * parent = Q_NULLPTR)

構造分割器采用給定 orientation and parent .

另請參閱 setOrientation ().

QSplitter:: ~QSplitter ()

銷毀分割器。刪除所有子級。

void QSplitter:: addWidget ( QWidget * widget )

添加給定 widget 到分割器布局在所有其它項之後。

widget 已在分割器中,將它移至新位置。

注意: 分割器擁有 Widget 的所有權。

另請參閱 insertWidget (), widget (),和 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 () 或 addWidget (). This is for compatibility and not the recommended way of putting widgets into a splitter in new code. Please use insertWidget () 或 addWidget () 在新代碼。

另請參閱 addWidget () 和 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

返迴分割器布局所包含的 Widget 數。

另請參閱 widget () 和 handle ().

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

另請參閱 handle () 和 indexOf ().

[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 和 * 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 (),和 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.

另請參閱 count () 和 widget ().

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

插入 widget specified into the splitter's layout at the given index .

widget 已在分割器中,將它移至新位置。

index is an invalid index, then the widget will be inserted at the end.

注意: 分割器擁有 Widget 的所有權。

另請參閱 addWidget (), indexOf (),和 widget ().

bool QSplitter:: isCollapsible ( int index ) const

返迴 true 若 Widget 在 index 是可摺疊的,否則返迴 false .

[虛擬] 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.

對於從右到左語言 (譬如:阿拉伯語和希伯來語),水平分隔器的布局是反轉的。 pos 那麼是到 Widget 右邊緣的距離。

另請參閱 splitterMoved (), closestLegalPosition (),和 getRange ().

void QSplitter:: refresh ()

更新分割器狀態。應該不需要調用此函數。

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

替換分割器布局中的 Widget 在給定 index by widget .

返迴剛纔被替換的 Widget 若 index 有效和 widget 尚不是分割器子級。否則,它返迴 null 且不置換或添加。

新近插入 Widget 的幾何體如同它替換的小部件。它可見和摺疊狀態也會被繼承。

注意: 分割器擁有所有權對於 widget 並將替換小部件的父級設為 null。

注意: 因為 widget gets reparented 到分割器,其 geometry 可能不會立即設置,直到 widget 接收適當事件。

該函數在 Qt 5.9 引入。

另請參閱 insertWidget () 和 indexOf ().

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

重實現自 QWidget::resizeEvent ().

bool QSplitter:: restoreState (const QByteArray & state )

將分割器布局還原成 state 指定。返迴 true 若狀態被還原;否則返迴 false .

通常,這用於結閤 QSettings 從過去的會話還原尺寸。這裏是範例:

還原分割器的狀態:

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

所提供的字節數組中的數據,無效或過期可能導緻無法還原分割器布局。

另請參閱 saveState ().

QByteArray QSplitter:: saveState () const

保存分割器布局的狀態。

通常,這用於結閤 QSettings 以記住用於未來會議的尺寸。版本號作為數據的一部分被存儲。這裏是範例:

    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 () 或 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 特性。

另請參閱 isCollapsible () 和 childrenCollapsible .

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

顯示橡皮筋在位置 pos 。若 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);
					

另請參閱 setSizes () 和 widget ().

[虛擬] QSize QSplitter:: sizeHint () const

重實現自 QWidget::sizeHint ().

QList < int > QSplitter:: sizes () const

返迴此分割器中所有 Widget 的大小參數列錶。

若分割器方嚮水平,列錶從左到右包含 Widget 寬度 (以像素為單位);若方嚮垂直,列錶從頂到下包含 Widget 高度 (以像素為單位)。

把值賦予另一分割器的 setSizes () 函數,將産生如此具有相同布局的分割器。

注意,不可見 Widget 擁有大小 0。

另請參閱 setSizes ().

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

此信號發射,當分割器手柄在特定 index 已移到位置 pos .

對於從右到左語言 (譬如:阿拉伯語和希伯來語),水平分隔器的布局是反轉的。 pos 那麼是到 Widget 右邊緣的距離。

另請參閱 moveSplitter ().

QWidget *QSplitter:: widget ( int index ) const

返迴 Widget 按給定 index in the splitter's layout.

另請參閱 count (), handle (), indexOf (),和 insertWidget ().