QSplitter 类

QSplitter 类实现了一个分割小部件。 更多...

头文件 #include <QSplitter>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QFrame

属性

公共函数

QSplitter(QWidget *parent = nullptr)
QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
virtual~QSplitter()
voidaddWidget(QWidget *widget)
boolchildrenCollapsible() const
intcount() const
voidgetRange(int index, int *min, int *max) const
QSplitterHandle *handle(int index) const
inthandleWidth() const
intindexOf(QWidget *widget) const
voidinsertWidget(int index, QWidget *widget)
boolisCollapsible(int index) const
boolopaqueResize() const
Qt::Orientationorientation() const
voidrefresh()
QWidget *replaceWidget(int index, QWidget *widget)
boolrestoreState(const QByteArray &state)
QByteArraysaveState() const
voidsetChildrenCollapsible(bool)
voidsetCollapsible(int index, bool collapse)
voidsetHandleWidth(int)
voidsetOpaqueResize(bool opaque = true)
voidsetOrientation(Qt::Orientation)
voidsetSizes(const QList<int> &list)
voidsetStretchFactor(int index, int stretch)
QList<int>sizes() const
QWidget *widget(int index) const

重写的公共函数

virtual QSizeminimumSizeHint() const override
virtual QSizesizeHint() const override

信号

voidsplitterMoved(int pos, int index)

受保护的函数

intclosestLegalPosition(int pos, int index)
virtual QSplitterHandle *createHandle()
voidmoveSplitter(int pos, int index)
voidsetRubberBand(int pos)

重写受保护的函数

virtual voidchangeEvent(QEvent *ev) override
virtual voidchildEvent(QChildEvent *c) override
virtual boolevent(QEvent *e) override
virtual voidresizeEvent(QResizeEvent *) override

详细描述

分割器允许用户通过拖动它们之间的边界来控制子小部件的大小。一个分割器可以控制任意数量的部件。QSplitter的典型用法是创建几个小部件,并使用insertWidget()或addWidget()将它们添加。

下面的示例将显示一个QListViewQTreeViewQTextEdit并排显示,并有两个分割器句柄。

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

如果在调用insertWidget()或addWidget()时一个小部件已位于QSplitter内部,它将移动到新位置。这可用来在分割器中后来重新排序小部件。您可以使用indexOf()、widget()和count()获取对分割器内部小部件的访问权限。

默认情况下,QSplitter水平布局其子小部件(并排);您可以使用setOrientation(Qt::Vertical)将其子小部件垂直布局。

默认情况下,所有小部件的大小都可以用户愿意的程度一样大或小,在minimumSizeHint()(或minimumSize)和maximumSize之间。

QSplitter默认情况下会动态调整其子小部件的大小。如果您希望QSplitter仅在调整大小的操作结束时调整子小部件的大小,请调用setOpaqueResize(false)。

小部件之间大小的初始分配是由初始大小乘以扩展因子确定的。您还可以使用setSizes()来设置所有小部件的大小。函数sizes()返回用户设置的大小。另外,您可以使用saveState()和restoreState()分别保存和恢复小部件的大小到QByteArray

当您隐藏一个子小部件时,它的空间将分布在其他子小部件之间。当您再次显示它时,它将被恢复。

注意:不支持将QLayout添加到QSplitter中(无论通过setLayout或使QSplitter成为QLayout的父级);请改用addWidget(见上面的示例)。

另见:QSplitterHandleQHBoxLayoutQVBoxLayoutQTabWidget

属性文档

childrenCollapsible : 布尔值

该属性控制用户是否可以调整子小部件的大小为0

默认情况下,子小部件是可折叠的。可以使用setCollapsible()方法启用或禁用单独子小部件的折叠。

访问函数

boolchildrenCollapsible() const
voidsetChildrenCollapsible(布尔值)

另请参阅setCollapsible().

handleWidth : 整数

该属性保存分离器的手柄宽度

默认情况下,此属性包含一个取决于用户平台和样式首选项的值。

将handleWidth设置为1或0时,实际抓取区域会扩展以重叠其相应小部件的几像素。

访问函数

inthandleWidth() const
voidsetHandleWidth(整数)

opaqueResize : 布尔值

如果小部件在交互式移动分离器时动态(不透明地)调整大小,则返回true。否则返回false

默认的调整大小行为取决于样式(由SH_Splitter_OpaqueResize样式提示确定)。但是,您可以通过调用setOpaqueResize()来覆盖它

访问函数

boolopaqueResize() const
voidsetOpaqueResize(布尔值 opaque = true)

另请参阅QStyle::StyleHint.

orientation : Qt::Orientation

该属性保存分离器的方向

默认情况下,方向是横向(即,小部件排列在一旁)。可能的方向有Qt::HorizontalQt::Vertical

访问函数

Qt::Orientationorientation() const
voidsetOrientation(Qt::Orientation)

另请参阅QSplitterHandle::orientation().

成员函数文档

[显式] QWidget * QSplitter::QSplitter(QWidget *parent = nullptr)

使用传递给QFrame构造函数的parent参数构建水平分离器。

另请参阅setOrientation().

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

使用给定的orientationparent构建分离器。

另请参阅setOrientation().

[虚,异常] QWidget * QSplitter::~QSplitter()

销毁分离器。所有子项都被删除。

void QSplitter::addWidget(QWidget *widget)

将给定的小部件添加到分离器布局中所有其他项之后。

如果widget已经在分离器中,则将其移至新位置。

注意:分离器将拥有并控制小部件。

另请参阅insertWidget(),widget()和indexOf().

[覆盖虚保护] void QSplitter::changeEvent(QEvent *ev)

重实现了: QFrame::changeEvent(QEvent *ev).

[覆盖虚保护] void QSplitter::childEvent(QChildEvent *c)

重实现了: QObject::childEvent(QChildEvent *event).

通知分割器已经插入或删除了由 c 描述的子部件。

此方法还用于处理将部件以分割器作为父级创建但未显式使用 insertWidget() 或 addWidget() 添加的情况。这是为了兼容性,并不是推荐在新的代码中将部件放入分割器的方式。在新的代码中,请使用 insertWidget() 或 addWidget().

另请参阅addWidget() 和 insertWidget().

[保护] int QSplitter::closestLegalPosition(int pos, int index)

返回 pos 处部件在 index 的最近合法位置。

对于从右到左的语言,如阿拉伯语和希伯来语,水平分割器的布局是反转的。然后从部件的右侧测量位置。

另请参阅getRange().

int QSplitter::count() const

返回分割器布局中包含的部件数量。

另请参阅widget() 和 handle().

[虚保护] QSplitterHandle *QSplitter::createHandle()

返回作为此分割器子部件的新分割器句柄。此函数可以在子类中重写以提供对自定义句柄的支持。

另请参阅handle() 和 indexOf().

[覆盖虚保护] bool QSplitter::event(QEvent *e)

重实现了:QFrame::event(QEvent *e).

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

如果 minmax 不为0,则在 index 处返回分割器的有效范围,并在 *min 和 *max 中返回。

QSplitterHandle *QSplitter::handle(int index) const

返回分割器布局中给定 index 处项左边的(或上面的)句柄,如果没有这样的项则返回 nullptr。索引为0的句柄始终是隐藏的。

对于从右到左的语言,如阿拉伯语和希伯来语,水平分割器的布局是反转的。句柄将在 index 处的部件右侧。

另请参阅 count(),widget(),indexOf(),createHandle() 和 setHandleWidth().

int QSplitter::indexOf(QWidget *widget) const

返回指定 widget 在分割器布局中的索引,如果没有找到则返回 -1。这也适用于处理。

处理器的编号从 0 开始。处理器的数量与子窗口的数量相同,但位置为 0 的处理器始终是隐藏的。

另请参阅 count() 和 widget().

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

将指定的 widget 插入到分割器布局中的指定 index 处。

如果widget已经在分离器中,则将其移至新位置。

如果 index 是无效索引,则该组件将插入到末尾。

注意:分离器将拥有并控制小部件。

另请参阅 addWidget(),indexOf() 和 widget().

bool QSplitter::isCollapsible(int index) const

如果位置 index 的组件可折叠,则返回 true,否则返回 false

[覆盖虚函数] QSize QSplitter::minimumSizeHint() const

重新实现了属性 QWidget::minimumSizeHint 的访问函数。

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

将位置 index 的分割器处理器的左或上边沿移动到与位置 pos 尽可能接近,位置 pos 是组件左或上边沿的距离。

对于从右到左的语言,如阿拉伯语和希伯来语,水平分割器的布局将反转。在这种情况下,pos 是从组件右边的距离。

另请参阅 splitterMoved(),closestLegalPosition() 和 getRange().

void QSplitter::refresh()

更新分割器的状态。通常不需要调用此函数。

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

widget 替换分割器布局中指定 index 处的组件。

如果 index 有效且 widget 不是分割器的子组件,则返回刚被替换的组件;否则返回 null,不执行替换或添加操作。

新插入的组件的几何形状将与替换的组件相同。其可见和折叠状态也将继承。

注意: 分割器将获得 widget 的所有权,并将替换了该组件的父组件设置为 null。

注意:由于widget被重新设置父窗口到分割器中,其几何形状可能不会立即设置正确,而只能在widget接收到适当的尺寸调整事件之后。

另请参阅:insertWidget() 和 indexOf().

[覆盖虚保护] void QSplitter::resizeEvent(QResizeEvent *)

重新实现:QWidget::resizeEvent(QResizeEvent *event).

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)

设置索引为index的子窗口是否可折叠到collapse

默认情况下,子窗口是可折叠的,意味着用户可以将其调整到大小为0,即使它们具有非零的minimumSize() 或 minimumSizeHint()。通过调用此函数可以按每个窗口的每个窗口更改此行为,或通过设置childrenCollapsible属性对分割器中的所有窗口全局设置。

另请参阅:isCollapsible() 和 childrenCollapsible.

[保护] void QSplitter::setRubberBand(int pos)

在位置pos上显示橡皮筋。如果pos是负数,则删除橡皮筋。

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

将子窗口的大小分别设置为在list中给出的值。

如果分割器是水平的,则设置每个窗口的宽度(以像素为单位),从左到右。如果分割器是垂直的,则从上到下设置每个窗口的高度。

忽略list中的附加值。如果list中的值太少,则结果是未定义的,但程序的行为仍然良好。

分割器窗口的总大小不受影响。相反,任何额外的/缺少的空间将根据大小的相对权重在窗口之间分配。

如果指定大小为0,则小部件将不可见。保留小部件的大小策略。也就是说,小于相应小部件最小大小提示的值将被提示值替换。

参见 sizes

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

更新位置为index的小部件的大小策略,使其具有stretch拉伸因子。

stretch不是有效的拉伸因子;有效的拉伸因子是通过将小部件的初始大小与stretch相乘来计算的。

此函数提供方便。它等价于

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

参见 setSizeswidget

[覆盖虚函数] QSize QSplitter::sizeHint() const

重新实现:QFrame::sizeHint() const

QList<int> QSplitter::sizes() const

返回包含本拆分器中所有小部件大小参数的列表。

如果拆分器的方向为水平,列表包含从左到右的像素宽度;如果方向为垂直,列表包含从上到下的小部件像素高度。

将值提供给另一个拆分器的setSizes()函数将产生与本拆分器相同布局的拆分器。

注意,不可见的小部件大小为0。

参见 setSizes

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

当特定index的拆分器手柄移动到位置pos时发出此信号。

对于从右到左的语言,如阿拉伯语和希伯来语,水平分割器的布局将反转。在这种情况下,pos 是从组件右边的距离。

参见 moveSplitter

QWidget *QSplitter::widget(int index) const

返回在拆分器布局中给定index的位置的小部件,如果没有这样的小部件,则返回nullptr

参见 counthandleindexOfinsertWidget

© 2024 The Qt Company Ltd。本文件中包含的文档贡献是各自所有者的版权。本文件提供的文档是根据自由软件基金会发布的GNU自由文档许可证1.3版本的条款许可的。Qt以及相关的商标是The Qt Company Ltd在芬兰及/或其他国家的商标。所有其他商标均为其所有者财产。