QSplitter 类
QSplitter 类实现了一个分割小部件。 更多...
头文件 | #include <QSplitter> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承 | QFrame |
属性
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
公共函数
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 |
重写的公共函数
virtual QSize | minimumSizeHint() const override |
virtual QSize | sizeHint() const override |
信号
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) override |
virtual void | childEvent(QChildEvent *c) override |
virtual bool | event(QEvent *e) override |
virtual void | resizeEvent(QResizeEvent *) override |
详细描述
分割器允许用户通过拖动它们之间的边界来控制子小部件的大小。一个分割器可以控制任意数量的部件。QSplitter的典型用法是创建几个小部件,并使用insertWidget()或addWidget()将它们添加。
下面的示例将显示一个QListView、QTreeView和QTextEdit并排显示,并有两个分割器句柄。
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。
另见:QSplitterHandle、QHBoxLayout、QVBoxLayout和QTabWidget。
属性文档
childrenCollapsible : 布尔值
该属性控制用户是否可以调整子小部件的大小为0
默认情况下,子小部件是可折叠的。可以使用setCollapsible()方法启用或禁用单独子小部件的折叠。
访问函数
bool | childrenCollapsible() const |
void | setChildrenCollapsible(布尔值) |
另请参阅setCollapsible().
handleWidth : 整数
该属性保存分离器的手柄宽度
默认情况下,此属性包含一个取决于用户平台和样式首选项的值。
将handleWidth设置为1或0时,实际抓取区域会扩展以重叠其相应小部件的几像素。
访问函数
int | handleWidth() const |
void | setHandleWidth(整数) |
opaqueResize : 布尔值
如果小部件在交互式移动分离器时动态(不透明地)调整大小,则返回true
。否则返回false
。
默认的调整大小行为取决于样式(由SH_Splitter_OpaqueResize样式提示确定)。但是,您可以通过调用setOpaqueResize()来覆盖它
访问函数
bool | opaqueResize() const |
void | setOpaqueResize(布尔值 opaque = true) |
另请参阅QStyle::StyleHint.
orientation : Qt::Orientation
该属性保存分离器的方向
默认情况下,方向是横向(即,小部件排列在一旁)。可能的方向有Qt::Horizontal和Qt::Vertical。
访问函数
Qt::Orientation | orientation() const |
void | setOrientation(Qt::Orientation) |
另请参阅QSplitterHandle::orientation().
成员函数文档
[显式]
QWidget * QSplitter::QSplitter(QWidget *parent = nullptr)
使用传递给QFrame构造函数的parent参数构建水平分离器。
另请参阅setOrientation().
[显式]
QWidget * QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
使用给定的orientation和parent构建分离器。
另请参阅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
返回分割器布局中包含的部件数量。
[虚保护]
QSplitterHandle *QSplitter::createHandle()
返回作为此分割器子部件的新分割器句柄。此函数可以在子类中重写以提供对自定义句柄的支持。
[覆盖虚保护]
bool QSplitter::event(QEvent *e)
重实现了:QFrame::event(QEvent *e).
void QSplitter::getRange(int index, int *min, int *max) const
如果 min 和 max 不为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 的处理器始终是隐藏的。
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。
另请参阅: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);
[覆盖虚函数]
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
。
© 2024 The Qt Company Ltd。本文件中包含的文档贡献是各自所有者的版权。本文件提供的文档是根据自由软件基金会发布的GNU自由文档许可证1.3版本的条款许可的。Qt以及相关的商标是The Qt Company Ltd在芬兰及/或其他国家的商标。所有其他商标均为其所有者财产。