Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

SplitContainer

继承: Container < Control < CanvasItem < Node < Object

派生: HSplitContainer, VSplitContainer

将两个子控件垂直或水平分隔的容器,提供了用于调整分隔比例的抓取器。

描述

仅接受两个子控件的容器,会将它们垂直或水平排列,在中间创建一个分隔条。分隔条可以拖拽,从而改变两个控件的大小关系。

教程

属性

bool

collapsed

false

bool

drag_area_highlight_in_editor

false

int

drag_area_margin_begin

0

int

drag_area_margin_end

0

int

drag_area_offset

0

DraggerVisibility

dragger_visibility

0

bool

dragging_enabled

true

int

split_offset

0

bool

vertical

false

方法

void

clamp_split_offset()

Control

get_drag_area_control()

主题属性

int

autohide

1

int

minimum_grab_thickness

6

int

separation

12

Texture2D

grabber

Texture2D

h_grabber

Texture2D

v_grabber

StyleBox

split_bar_background


信号

drag_ended() 🔗

用户结束拖拽时发出。


drag_started() 🔗

用户开始拖拽时发出。


dragged(offset: int) 🔗

当用户拖动拖动器时发出。


枚举

enum DraggerVisibility: 🔗

DraggerVisibility DRAGGER_VISIBLE = 0

autohidefalse 时,拆分拖动器始终可见,否则仅在鼠标在拖动器上悬停时可见。

拖动器图标的大小决定了最小间隔 separation

拖动器图标如果比拆分条长,就会自动隐藏。

DraggerVisibility DRAGGER_HIDDEN = 1

拆分拖动器图标始终不可见,无视 autohide 的值。

拖动器图标的大小决定了最小间隔 separation

DraggerVisibility DRAGGER_HIDDEN_COLLAPSED = 2

拆分拖动器图标不可见,拆分条粗细折叠为零。


属性说明

bool collapsed = false 🔗

  • void set_collapsed(value: bool)

  • bool is_collapsed()

如果为 true,则会禁用拖动器,子节点会根据 split_offset0 时的情况来调整大小。


bool drag_area_highlight_in_editor = false 🔗

  • void set_drag_area_highlight_in_editor(value: bool)

  • bool is_drag_area_highlight_in_editor_enabled()

高亮拖动区域 Rect2,便于在开发时查看位置。dragging_enabledtrue 时拖动区域为金色,为 false 时则为红色。


int drag_area_margin_begin = 0 🔗

  • void set_drag_area_margin_begin(value: int)

  • int get_drag_area_margin_begin()

减少可拖动区域和拆分条 split_bar_background 在容器起始侧的大小。


int drag_area_margin_end = 0 🔗

  • void set_drag_area_margin_end(value: int)

  • int get_drag_area_margin_end()

减少可拖动区域和拆分条 split_bar_background 在容器结尾侧的大小。


int drag_area_offset = 0 🔗

  • void set_drag_area_offset(value: int)

  • int get_drag_area_offset()

将拖动区域在容器轴向上进行偏移,防止拖动区域与 ScrollBar 或其他子节点的可选中 Control 发生重叠。


DraggerVisibility dragger_visibility = 0 🔗

决定拖动器是否可见。详见 DraggerVisibility。该属性无法决定拖动器是否启用,这一需求请使用 dragging_enabled


bool dragging_enabled = true 🔗

  • void set_dragging_enabled(value: bool)

  • bool is_dragging_enabled()

启用或禁用拆分拖拽。


int split_offset = 0 🔗

  • void set_split_offset(value: int)

  • int get_split_offset()

两个 Control 之间拆分的初始偏移量,0 位于第一个 Control 的末尾。


bool vertical = false 🔗

  • void set_vertical(value: bool)

  • bool is_vertical()

如果为 true,则该 SplitContainer 会垂直排列其子代,而不是水平排列。

在使用 HSplitContainerVSplitContainer 时无法改变。


方法说明

void clamp_split_offset() 🔗

限制 split_offset 值不超出当前可能的最小值和最大值。


Control get_drag_area_control() 🔗

返回拖拽区域 Control。例如你可以把一个预先配置好的按钮放到拖拽区域 Control 中,这样这个按钮就会跟随拆分条移动。调用 reparent() 前请尝试将 Button 的锚点设置为 center

$BarnacleButton.reparent($SplitContainer.get_drag_area_control())

注意:拖拽区域 Control 绘制在 SplitContainer 的子节点之上,因此 Control 调用 CanvasItem 绘制方法所绘制的内容和添加至 Control 的子节点也会显示在 SplitContainer 的子节点之上。如果需要阻止鼠标拖动,请尝试将自定义子节点的 Control.mouse_filter 设置为 Control.MOUSE_FILTER_IGNORE

警告:这是必要的内部节点,将其移除或释放都可能造成崩溃。


主题属性说明

int autohide = 1 🔗

布尔值。如果为 1true),则拖动器不在鼠标下方时会自动隐藏。如果为 0false)则始终可见。dragger_visibility 必须为 DRAGGER_VISIBLE


int minimum_grab_thickness = 6 🔗

拆分条上用户可点击抓取区域的最小厚度。能够确保拆分条在 separationh_grabber / v_grabber 过窄、难以选中时仍然可以拖动。


int separation = 12 🔗

拆分条的粗细,即容器中两个子节点的间隙。如果 dragger_visibilityDRAGGER_VISIBLE 或者为 DRAGGER_HIDDEN 的同时 separation 比拖动器图标相应方向的大小要小,这个粗细就会被拖动器图标的大小覆盖。

注意:如果要让 separation 比拖动器图标大小要小,例如想要设成 1 px 的细线,请将 h_grabberv_grabber 设为新的 ImageTexture,这样就把拖动器图标的大小设为了 0 px


Texture2D grabber 🔗

在中间区域绘制的抓取图标。


Texture2D h_grabber 🔗

verticalfalse 时绘制在中间区域的抓取器图标。


Texture2D v_grabber 🔗

verticaltrue 时绘制在中间区域的抓取器图标。


StyleBox split_bar_background 🔗

决定拆分条厚度大于零时的背景。