SplitContainer
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — SplitContainer
SplitContainer
节点继承关系
继承链:Node → CanvasItem → Control → Container → SplitContainer
继承自 Container
| 类型 | 名称 | 说明 |
|---|---|---|
| 信号 | sort_children | 子节点排列发生变化 |
| 方法 | FitChildInRect() | 调整子节点到指定矩形内 |
继承自 Control
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Size | 控件尺寸 |
| 属性 | Position | 控件位置 |
| 属性 | AnchorsPreset | 锚点预设 |
| 属性 | GrowDirection | 超出容器时的扩展方向 |
| 属性 | MouseFilter | 鼠标事件过滤(停止 / 通过 / 忽略) |
| 属性 | FocusMode | 焦点模式(无 / 单击 / 全部) |
| 信号 | gui_input | 接收到 GUI 输入事件 |
| 信号 | mouse_entered | 鼠标进入控件区域 |
| 信号 | mouse_exited | 鼠标离开控件区域 |
| 信号 | focus_entered | 获得焦点 |
| 信号 | focus_exited | 失去焦点 |
| 信号 | resized | 尺寸变化 |
| 方法 | GrabFocus() | 获取焦点 |
| 方法 | ReleaseFocus() | 释放焦点 |
| 方法 | SetAnchorsPreset() | 设置锚点预设 |
| 方法 | GetMinimumSize() | 获取最小尺寸 |
继承自 CanvasItem
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Visible | 是否可见 |
| 属性 | Modulate | 整体颜色叠加(乘法) |
| 属性 | SelfModulate | 自身颜色叠加(不影响子节点) |
| 属性 | ZIndex | 绘制层级(Z 轴排序) |
| 信号 | visibility_changed | 可见性变化时触发 |
| 方法 | GetGlobalMousePosition() | 获取鼠标全局坐标 |
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
SplitContainer 把区域分成两部分,中间有一个可以拖动的分割线。就像很多代码编辑器左边是文件树、右边是代码区——中间那条线可以拖动。SplitContainer 是抽象基类,实际使用它的子类 HSplitContainer(水平分割)和 VSplitContainer(垂直分割)。
使用频率:★★ 偶尔使用(编辑器类布局常用)
节点用途
- 可拖拽分割的布局
- 左右或上下分栏
使用场景
- 编辑器界面(左侧文件树 + 右侧编辑区)
- 游戏内聊天窗口(上聊天记录 + 下输入框)
- 属性面板(左属性列表 + 右属性编辑器)
常用节点搭配
- 搭配任意 Container 或 Control 做两侧内容
生效必备素材/资源
无需特殊资源。
节点属性与信号
自有属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
split_offset | int | 0 | — | 分割线的初始位置 |
collapsed | bool | false | — | 第二个面板是否折叠 |
dragger_visibility | 枚举 | Visible | — | 分割线的可见性:Visible(可见)、Hidden(隐藏)、HiddenCollapsed(折叠时隐藏) |
anchor_left | int | 0 | — | 分割的最小位置比例 |
anchor_right | int | 1 | — | 分割的最大位置比例 |
信号
| 信号 | 触发时机 | 参数 |
|---|---|---|
dragged | 分割线被拖动时 | int 偏移量 |
常用方法
继承自 Container 的所有方法。
代码示例
C
using Godot;
// 左右分割布局:左边文件树 + 右边内容区
public partial class EditorLayout : HSplitContainer
{
public override void _Ready()
{
SetAnchorsPreset(LayoutPreset.FullRect);
SplitOffset = 200; // 分割线初始位置
// 左侧:文件树
var tree = new Tree();
tree.CustomMinimumSize = new Vector2(180, 0);
AddChild(tree);
// 右侧:内容区
var content = new TextEdit();
content.CustomMinimumSize = new Vector2(300, 0);
AddChild(content);
}
}GDScript
# 左右分割布局:左边文件树 + 右边内容区
extends HSplitContainer
func _ready():
set_anchors_preset(Control.LayoutPreset.FULL_RECT)
split_offset = 200 # 分割线初始位置
# 左侧:文件树
var tree = Tree.new()
tree.custom_minimum_size = Vector2(180, 0)
add_child(tree)
# 右侧:内容区
var content = TextEdit.new()
content.custom_minimum_size = Vector2(300, 0)
add_child(content)