跳到主要内容

Control

继承

CanvasItem

简要描述

所有用户界面节点都从Control继承。控件的锚点和边距相对于其父节点调整位置和大小。

描述

所有与UI相关的节点的基类。Control拥有定义其范围的边界矩形,相对于其父控件或当前视口的锚点位置以及表示锚点偏移的边距。当节点的任何父节点或屏幕尺寸更改时,边距会自动更新。

有关IdeaXR的UI系统、锚点、边距和容器的更多信息,请参见手册中的相关教程。要构建灵活的UI,您需要一起使用从ControlContainer节点继承的UI元素。

用户界面节点和输入

IdeaXR首先通过调用Node._input将输入事件发送到场景的根节点。Node._input将事件从节点树向下转发到鼠标光标或键盘焦点上的节点。节点调用MainLoop._input_event可以获取该事件。一旦调用了accept_event,其他节点将不能接收该事件。当接收事件后,Node._unhandled_input将不会对事件进行处理。

键盘焦点中只能有一个Control节点。仅焦点所在的节点将接收键盘事件。要获得焦点,需要调用grap_focus。当另一个节点获取焦点或者聚焦的节点隐藏时,Control节点将失去焦点。

mouse_filter设置为MOUSE_FILTER_IGNOREControl节点会忽略鼠标或触摸事件。将图标放在按钮顶部时,需要这个设置。

Theme资源会更改控件的外观。如果更改Control节点上的Theme,它将影响其所有子节点。要覆盖某些主题的参数,请调用add_*_override的某一个方法,例如add_font_override。也可以使用检查器覆盖主题。

成员

类型属性名默认值
floatanchor_bottom0.0
floatanchor_left0.0
floatanchor_right0.0
floatanchor_top0.0
intfocus_mode0
NodePathfocus_neighbour_bottomNodePath("")
NodePathfocus_neighbour_leftNodePath("")
NodePathfocus_neighbour_rightNodePath("")
NodePathfocus_neighbour_topNodePath("")
NodePathfocus_nextNodePath("")
NodePathfocus_previousNodePath("")
intgrow_horizontal1
intgrow_vertical1
Stringhint_tooltip""
floatmargin_bottom0.0
floatmargin_left0.0
floatmargin_right0.0
floatmargin_top0.0
intmouse_default_cursor_shape0
intmouse_filter0
boolrect_clip_contentfalse
Vector2rect_global_position
Vector2rect_min_sizeVector2( 0, 0 )
Vector2rect_pivot_offsetVector2( 0, 0 )
Vector2rect_positionVector2( 0, 0 )
floatrect_rotation0.0
Vector2rect_scaleVector2( 1, 1 )
Vector2rect_sizeVector2( 0, 0 )
intsize_flags_horizontal1
floatsize_flags_stretch_ratio1.0
intsize_flags_vertical1
Themetheme

方法

返回值类型方法名称
bool_clips_input() virtual
Vector2_get_minimum_size() virtual
void_gui_input(event: InputEvent) virtual
Object_make_custom_tooltip(for_text: String) virtual
voidaccept_event()
voidadd_color_override(name: String, color: Color)
voidadd_constant_override(#method-add_constant_override)(name: String, constant: int)
voidadd_font_override(name: String, font: Font)
voidadd_icon_override(name: String, texture: Texture)
voidadd_shader_override(name: String, shader: Shader)
voidadd_stylebox_override(name: String, stylebox: StyleBox)
boolcan_drop_data(position: Vector2, data: Variant) virtual
voiddrop_data(position: Vector2, data: Variant) virtual
voidforce_drag(data: Variant, preview: Control)
floatget_anchor(margin: int) const
Vector2get_begin() const
Colorget_color(name: String, type: String = "") const
Vector2get_combined_minimum_size() const
intget_constant(#method-get_constant)(name: String, type: String = "") const
intget_cursor_shape(position: Vector2 = Vector2( 0, 0 )) const
Variantget_drag_data(position: Vector2) virtual
Vector2get_end() const
NodePathget_focus_neighbour(margin: int) const
Controlget_focus_owner() const
Fontget_font(name: String, type: String = "") const
Rect2get_global_rect() const
Textureget_icon(name: String, type: String = "") const
floatget_margin(margin: int) const
Vector2get_minimum_size() const
Vector2get_parent_area_size() const
Controlget_parent_control() const
Rect2get_rect() const
floatget_rotation() const
StyleBoxget_stylebox(name: String, type: String = "") const
Stringget_tooltip(at_position: Vector2 = Vector2( 0, 0 )) const
voidgrab_click_focus()
voidgrab_focus()
boolhas_color(name: String, type: String = "") const
boolhas_color_override(name: String) const
boolhas_constant(#method-has_constant)(name: String, type: String = "") const
boolhas_constant_override(#method-has_constant_override)(name: String) const
boolhas_focus() const
boolhas_font(name: String, type: String = "") const
boolhas_font_override(name: String) const
boolhas_icon(name: String, type: String = "") const
boolhas_icon_override(name: String) const
boolhas_point(point: Vector2) virtual
boolhas_shader_override(name: String) const
boolhas_stylebox(name: String, type: String = "") const
boolhas_stylebox_override(name: String) const
voidminimum_size_changed()
voidrelease_focus()
voidset_anchor(margin: int, anchor: float, keep_margin: bool = false, push_opposite_anchor: bool = true)
voidset_anchor_and_margin(margin: int, anchor: float, offset: float, push_opposite_anchor: bool = false)
voidset_anchors_and_margins_preset(preset: int, resize_mode: int = 0, margin: int = 0)
voidset_anchors_preset(preset: int, keep_margins: bool = false)
voidset_begin(position: Vector2)
voidset_drag_forwarding(target: Control)
voidset_drag_preview(control: Control)
voidset_end(position: Vector2)
voidset_focus_neighbour(margin: int, neighbour: NodePath)
voidset_global_position(position: Vector2, keep_margins: bool = false)
voidset_margin(margin: int, offset: float)
voidset_margins_preset(preset: int, resize_mode: int = 0, margin: int = 0)
voidset_position(position: Vector2, keep_margins: bool = false)
voidset_rotation(radians: float)
voidset_size(size: Vector2, keep_margins: bool = false)
voidshow_modal(exclusive: bool = false)
voidwarp_mouse(to_position: Vector2)

信号

  • **focus_entered**

在节点获得键盘焦点时发出。


  • **focus_exited**

当节点失去键盘焦点时发出。


  • **gui_input**

在节点收到InputEvent时发出。


  • **minimum_size_changed**

当节点的最小大小更改时发出。


  • **modal_closed**

当模态Control关闭时发出。参见show_modal


  • **mouse_entered**

当鼠标进入控件的Rect区域时触发,前提是其控件的mouse_filter允许事件到达该控件。


  • **mouse_exited**

当鼠标离开控件的Rect区域时发出,条件是其控件的mouse_filter允许事件到达它。


  • **resized**

当控件更改大小时发出。


  • **size_flags_changed**

当大小标志更改时发出。请参阅size_flags_horizontalsize_flags_vertical


枚举

enum FocusMode:

  • **FOCUS_NONE = 0**

该节点无法获取焦点。与focus_mode一起使用。

  • **FOCUS_CLICK = 1**

该节点只能抓住鼠标单击的焦点。与focus_mode一起使用。

  • **FOCUS_ALL = 2**

该节点可以获取焦点于鼠标单击或使用键盘上的箭头和Tab键。与focus_mode一起使用。


enum CursorShape:

  • **CURSOR_ARROW = 0**

当用户将鼠标在节点悬停时,显示系统的箭头鼠标光标。与mouse_default_cursor_shape成员一起使用。

  • **CURSOR_IBEAM = 1**

当用户将鼠标在节点悬停时,显示系统的I型鼠标光标。它告诉用户他们可以突出显示或插入文本。

  • **CURSOR_POINTING_HAND = 2**

当用户将鼠标在节点悬停时,显示系统的手形鼠标光标。

  • **CURSOR_CROSS = 3**

当用户将鼠标在节点悬停时,显示系统的交叉鼠标光标。

  • **CURSOR_WAIT = 4**

当用户将鼠标悬停在节点上时,显示系统的等待鼠标光标,通常是一个沙漏。

  • **CURSOR_BUSY = 5**

当用户将鼠标在节点悬停时,显示系统的繁忙鼠标光标。通常是沙漏。

  • **CURSOR_DRAG = 6**

当用户将鼠标悬停在节点上时,显示系统的鼠标光标,通常是闭合的拳头或叉形符号。它告诉用户他们当前正在拖动项目,例如Scene面板中的节点。

  • **CURSOR_CAN_DROP = 7**

当用户将鼠标在节点悬停时,显示系统的鼠标光标,它可以是张开的手。它告诉用户他们可以放下当前正在抓取的对象,例如Scene面板中的节点。

  • **CURSOR_FORBIDDEN = 8**

当用户将鼠标在节点悬停时,显示系统禁止的鼠标光标。通常是一个交叉的圆圈。

  • **CURSOR_VSIZE = 9**

当用户将鼠标在节点悬停时,显示系统的垂直调整大小的鼠标光标,形状为双向垂直箭头。它告诉用户他们可以垂直调整窗口或面板的大小。

  • **CURSOR_HSIZE = 10**

当用户将鼠标在节点悬停时,显示系统的水平调整大小的鼠标光标,形状为双向水平箭头。它告诉用户他们可以水平调整窗口或面板的大小。

  • **CURSOR_BDIAGSIZE = 11**

当用户将鼠标在节点悬停时,显示系统窗口调整大小的鼠标光标,光标是从左下角到右上角的双向箭头。它告诉用户可以水平和垂直调整窗口或面板的大小。

  • **CURSOR_FDIAGSIZE = 12**

当用户将鼠标在节点悬停时,显示系统窗口调整大小的鼠标光标。光标是一个双向箭头,从左上角到右下角,与CURSOR_BDIAGSIZE相反。它告诉用户可以水平和垂直调整窗口或面板的大小。

  • **CURSOR_MOVE = 13**

当用户将鼠标在节点悬停时,显示系统的移动鼠标光标。它以90度角显示2个双向箭头。它告诉用户他们可以自由移动UI元素。

  • **CURSOR_VSPLIT = 14**

当用户将鼠标在节点悬停时,显示系统的垂直拆分鼠标光标。在Windows上,它与CURSOR_VSIZE相同。

  • **CURSOR_HSPLIT = 15**

当用户将鼠标在节点悬停时,显示系统的水平拆分鼠标光标。在Windows上,它与CURSOR_HSIZE相同。

  • **CURSOR_HELP = 16**

当用户将鼠标悬停在一个节点上时,显示系统的帮助鼠标光标,即一个问号。


enum LayoutPreset:

  • **PRESET_TOP_LEFT = 0**

将所有4个定位点对齐到父控件边界的左上角。与set_anchors_preset一起使用。

  • **PRESET_TOP_RIGHT = 1**

将所有4个定位点对齐到父控件边界的右上角。与set_anchors_preset一起使用。

  • **PRESET_BOTTOM_LEFT = 2**

将所有4个定位点对齐到父控件边界的左下角。与set_anchors_preset一起使用。

  • **PRESET_BOTTOM_RIGHT = 3**

将所有4个定位点对齐到父控件边界的右下角。与set_anchors_preset一起使用。

  • **PRESET_CENTER_LEFT = 4**

将所有4个定位点对齐到父控件边界的左边缘的中心。与set_anchors_preset一起使用。

  • **PRESET_CENTER_TOP = 5**

将所有4个定位点对齐到父控件边界的上边缘的中心。与set_anchors_preset一起使用。

  • **PRESET_CENTER_RIGHT = 6**

将所有4个定位点对齐到父控件边界右边缘的中心。与set_anchors_preset一起使用。

  • **PRESET_CENTER_BOTTOM = 7**

将所有4个定位点对齐到父控件边界的底部边缘的中心。与set_anchors_preset一起使用。

  • **PRESET_CENTER = 8**

将所有4个定位点对齐到父控件边界的中心。与set_anchors_preset一起使用。

  • **PRESET_LEFT_WIDE = 9**

将所有4个定位点对齐到父控件的左边缘。左边距相对于节点父节点的左边缘,而上边距相对于节点父节点的左上角。与set_anchors_preset一起使用。

  • **PRESET_TOP_WIDE = 10**

将所有4个定位点对齐到父控件的顶部边缘。左侧边距相对于节点父节点的左上角,顶部边距相对于顶部的边缘,右侧边距相对于节点的父节点的右上角。与set_anchors_preset一起使用。

  • **PRESET_RIGHT_WIDE = 11**

将所有4个定位点对齐到父控件的右边缘。右侧边距相对于节点父节点的右边缘而顶部边距相对于节点的父节点的右上角。与set_anchors_preset一起使用。

  • **PRESET_BOTTOM_WIDE = 12**

将所有4个定位点对齐到父控件的底部边缘。左侧边距相对于节点父节点的左下角,底部边距相对于底部的边缘,右侧边距相对于节点的父节点的右下角。与set_anchors_preset一起使用。

  • **PRESET_VCENTER_WIDE = 13**

将所有4个锚点对齐到一条垂直线,该垂直线将父控件切成两半。与set_anchors_preset一起使用。

  • **PRESET_HCENTER_WIDE = 14**

将所有4个锚点对齐到一条水平线,该水平线将父控件切成两半。与set_anchors_preset一起使用。

  • **PRESET_WIDE = 15**

将所有4个定位点对齐到父控件的各个角。应用此预设后,将所有4个边距设置为0,Control将适合其上级控件。这等效于编辑器中的“全角”布局选项。与set_anchors_preset一起使用。


enum LayoutPresetMode:

  • **PRESET_MODE_MINSIZE = 0**

控件将被调整为最小尺寸。

  • **PRESET_MODE_KEEP_WIDTH = 1**

控件的宽度不会改变。

  • **PRESET_MODE_KEEP_HEIGHT = 2**

控件的高度不会改变。

  • **PRESET_MODE_KEEP_SIZE = 3**

控件的大小不会改变。


enum SizeFlags:

  • **SIZE_FILL = 1**

告诉父级Container]扩展此节点的边界以填充所有可用空间,而无需推动任何其他节点。与size_flags_horizontalsize_flags_vertical一起使用。

  • **SIZE_EXPAND = 2**

告诉父级Container让该节点占用您标记的轴上的所有可用空间。如果将多个相邻节点设置为扩展,它们将根据其拉伸比共享空间。参见size_flags_stretch_ratio。与size_flags_horizontalsize_flags_vertical一起使用。

  • **SIZE_EXPAND_FILL = 3**

将节点的大小标志设置为同时填充和扩展。有关更多信息,请参见上面的2个常量。

  • **SIZE_SHRINK_CENTER = 4**

告诉父级Container使节点本身居中。它基于控件的边界框居中,因此它不适用于fill或expand尺寸标志。与size_flags_horizontalsize_flags_vertical一起使用。

  • **SIZE_SHRINK_END = 8**

告诉父级Container将节点与其末端(底部或右侧)对齐。它不适用于fill或expand标志。与size_flags_horizontalsize_flags_vertical一起使用。


enum MouseFilter:

  • **MOUSE_FILTER_STOP = 0**

如果单击,控件将通过_gui_input接收鼠标按钮输入事件。并且控件将接收mouse_enteredmouse_exited信号。这些事件将自动标记为已处理,并且不会进一步传播到其他控件。这也会导致其他控件中的信号阻塞。

  • **MOUSE_FILTER_PASS = 1**

如果单击,控件将通过_gui_input接收鼠标按钮输入事件。并且控件将接收mouse_enteredmouse_exited信号。如果此控件不处理事件,则将考虑父控件(如果有),依此类推,直到不再有可能处理它的父控件为止。这也允许信号在其他控件中触发,即使根本没有控件处理过该事件,该事件仍将自动处理,因此不会触发未处理的输入。

  • **MOUSE_FILTER_IGNORE = 2**

控件将不会通过_gui_input接收鼠标按钮输入事件。该控件也不会接收到mouse_enteredmouse_exited信号。这不会阻止其他控件接收这些事件或触发信号。忽略的事件将不会自动处理。


enum GrowDirection:

  • **GROW_DIRECTION_BEGIN = 0**

如果控件的最小尺寸更改为大于相应轴上的当前尺寸,则控件将向左或顶部增大以进行组合。

  • **GROW_DIRECTION_END = 1**

如果控件的最小尺寸更改为大于相应轴上的当前尺寸,则控件将向右或向下增大以进行补偿。

  • **GROW_DIRECTION_BOTH = 2**

如果控件的最小大小更改为大于当前大小,则控件将在两个方向上均等地增长以组成该控件。


enum Anchor:

  • **ANCHOR_BEGIN = 0**

将4个锚点的一侧之一对齐到节点的Rect的左上角。将其与anchor_*成员变量之一一起使用,例如anchor_left。要一次更改所有4个锚点,请使用set_anchors_preset

  • **ANCHOR_END = 1**

将4个锚点的一侧之一对齐到节点的Rect的右下角。将其与anchor_*成员变量之一一起使用,例如anchor_left。要一次更改所有4个锚点,请使用set_anchors_preset


常量

  • **NOTIFICATION_RESIZED = 40**

当节点更改大小时发送。使用rect_size获取新大小。

  • **NOTIFICATION_MOUSE_ENTER = 41**

当鼠标指针进入节点时发送。

  • **NOTIFICATION_MOUSE_EXIT = 42**

当鼠标指针退出节点时发送。

  • **NOTIFICATION_FOCUS_ENTER = 43**

当节点获得焦点时发送。

  • **NOTIFICATION_FOCUS_EXIT = 44**

当节点失去焦点时发送。

  • **NOTIFICATION_THEME_CHANGED = 45**

在节点的theme更改时发送,就在IdeaXR重画控件之前。调用add_*_override方法时发生。

  • **NOTIFICATION_MODAL_CLOSE = 46**

当打开的模态对话框关闭时发送。参见show_modal

  • **NOTIFICATION_SCROLL_BEGIN = 47**

当此节点在已开始滚动的ScrollContainer内部时发送。

  • **NOTIFICATION_SCROLL_END = 48**

当此节点位于已停止滚动的ScrollContainer内部时发送。

成员说明

  • float anchor_bottom
Default0.0
setter_set_anchor(value)
getterget_anchor
  • float anchor_left
Default0.0
setter_set_anchor(value)
getterget_anchor
  • float anchor_right
Default0.0
setter_set_anchor(value)
getterget_anchor
  • float anchor_top
Default0.0
setter_set_anchor(value)
getterget_anchor
  • int focus_mode
Default0
setterset_focus_mode(value)
getterget_focus_mode
  • NodePath focus_neighbour_bottom
DefaultNodePath("")
setterset_focus_neighbour(value)
getterget_focus_neighbour
  • NodePath focus_neighbour_left
DefaultNodePath("")
setterset_focus_neighbour(value)
getterget_focus_neighbour
  • NodePath focus_neighbour_right
DefaultNodePath("")
setterset_focus_neighbour(value)
getterget_focus_neighbour
  • NodePath focus_neighbour_top
DefaultNodePath("")
setterset_focus_neighbour(value)
getterget_focus_neighbour
  • NodePath focus_next
DefaultNodePath("")
setterset_focus_next(value)
getterget_focus_next
  • NodePath focus_previous
DefaultNodePath("")
setterset_focus_previous(value)
getterget_focus_previous
  • int grow_horizontal
Default1
setterset_h_grow_direction(value)
getterget_h_grow_direction
  • int grow_vertical
Default1
setterset_v_grow_direction(value)
getterget_v_grow_direction
  • String hint_tooltip
Default""
setterset_tooltip(value)
getter_get_tooltip
  • float margin_bottom
Default0.0
setterset_margin(value)
getterget_margin
  • float margin_left
Default0.0
setterset_margin(value)
getterget_margin
  • float margin_right
Default0.0
setterset_margin(value)
getterget_margin
  • float margin_top
Default0.0
setterset_margin(value)
getterget_margin
  • int mouse_default_cursor_shape
Default0
setterset_default_cursor_shape(value)
getterget_default_cursor_shape
  • int mouse_filter
Default0
setterset_mouse_filter(value)
getterget_mouse_filter
  • bool rect_clip_content
Defaultfalse
setterset_clip_contents(value)
getteris_clipping_contents
  • Vector2 rect_global_position
setter_set_global_position(value)
getterget_global_position
  • Vector2 rect_min_size
DefaultVector2( 0, 0 )
setterset_custom_minimum_size(value)
getterget_custom_minimum_size
  • Vector2 rect_pivot_offset
DefaultVector2( 0, 0 )
setterset_pivot_offset(value)
getterget_pivot_offset
  • Vector2 rect_position
DefaultVector2( 0, 0 )
setter_set_position(value)
getterget_position
  • float rect_rotation
Default0.0
setterset_rotation_degrees(value)
getterget_rotation_degrees
  • Vector2 rect_scale
DefaultVector2( 1, 1 )
setterset_scale(value)
getterget_scale
  • Vector2 rect_size
DefaultVector2( 0, 0 )
setter_set_size(value)
getterget_size
  • int size_flags_horizontal
Default1
setterset_h_size_flags(value)
getterget_h_size_flags
  • float size_flags_stretch_ratio
Default1.0
setterset_stretch_ratio(value)
getterget_stretch_ratio
  • int size_flags_vertical
Default1
setterset_v_size_flags(value)
getterget_v_size_flags
  • Theme theme
setterset_theme(value)
getterget_theme

方法说明

  • _clips_input _clips_input() virtual

用户要实现的虚方法。返回是否应为该控件矩形之外的子控件调用_gui_input。输入将被裁剪到此Control的Rect的范围内。与rect_clip_content相似,但不影响可见性。

如果用户没有实现,则默认为false


  • _get_minimum_size _get_minimum_size() virtual

用户要实现的虚方法。返回此控件的最小大小。rect_min_size的替代方法,用于通过代码控制最小大小。实际的最小尺寸将是这两者的最大值(分别在每个轴上)。

如果用户没有实现,则默认为Vector2.ZERO


  • _gui_input _gui_input(event: InputEvent) virtual

用户要实现的虚方法。使用此方法来处理和接受UI元素上的输入。参见accept_event

示例:单击一个控件。

func _gui_input(event):
if event is InputEventMouseButton:
if event.button_index == BUTTON_LEFT and event.pressed:
print("我被点到了:D")

在以下情况下,该事件不会触发:

*在控件外部单击(请参阅has_point);

*控件的mouse_filter设置为MOUSE_FILTER_IGNORE

*控件被其顶部的另一个Control阻塞,该控件没有将mouse_filter设置为MOUSE_FILTER_IGNORE

*控件的父节点已将mouse_filter设置为MOUSE_FILTER_STOP或已接收该事件;

*它发生在父级矩形的外部,并且父级启用了rect_clip_content_clips_input


  • _make_custom_tooltip _make_custom_tooltip(for_text: String) virtual

用户要实现的虚方法。返回一个Control节点,该节点用作工具提示,而不是默认提示。使用for_text参数确定工具提示应包含的文本(可能是hint_tooltip的内容)。

返回的节点必须是Control类型或继承自Control的类型。它可以具有任何类型的子节点。当工具提示消失时,它会被释放,因此请确保您始终提供一个新实例,而不是场景中的节点。当返回null或非Control节点时,将使用默认的工具提示。

注意:工具提示会缩小到最小尺寸。如果要确保它是完全可见的,则可能需要将其rect_min_size设置为某个非零值。

自定义节点实例的用法示例:

func _make_custom_tooltip(for_text):
var label = Label.new()
label.text = for_text
return label

自定义场景实例的用法示例:

func _make_custom_tooltip(for_text):
var tooltip = preload("SomeTooltipScene.tscn").instance()
tooltip.get_node("Label").text = for_text
return tooltip

  • accept_event accept_event()

将输入事件标记为已处理。一旦接收输入事件,它就会停止传播,包括正在侦听Node._unhandled_inputNode._unhandled_key_input的节点。


  • add_color_override add_color_override(name: String, color: Color)

覆盖在控件使用的theme资源中给定nameColor。如果color为空或无效,则清除覆盖并使用当前Theme中的颜色。


  • add_constant_override add_constant_override(name: String, constant: int)

覆盖在控件使用的theme资源中给定name的整数常量。如果constant为空或无效,则清除覆盖并使用当前Theme中的常量。


  • add_font_override add_font_override(name: String, font: Font)

覆盖在控件使用的theme资源中给定name的字体。如果font为空或无效,则清除覆盖并使用当前Theme中的字体。


  • add_icon_override add_icon_override(name: String, texture: Texture)

覆盖在控件使用的theme资源中给定name的图标。如果icon为空或无效,则清除覆盖并使用当前Theme中的图标。


  • add_shader_override add_shader_override(name: String, shader: Shader)

覆盖在控件使用的theme资源中给定nameShader。如果shader为空或无效,则清除覆盖并使用当前Theme中的着色器。


  • add_stylebox_override add_stylebox_override(name: String, stylebox: StyleBox)

覆盖在控件使用的theme资源中给定nameStyleBox。如果stylebox为空或无效,则清除覆盖并使用当前Theme中的StyleBox


  • can_drop_data can_drop_data(position: Vector2, data: Variant) virtual

IdeaXR调用此方法来测试是否可以将控件的get_drag_data返回的data放在position处。position在此控件的局部空间中。

此方法仅应用于测试数据。处理数据用drop_data

func can_drop_data(position, data):
# 检查位置是否与此控件相关
# 否则,检查数据
return typeof(data) == TYPE_DICTIONARY and data.has("expected")

  • drop_data drop_data(position: Vector2, data: Variant) virtual

IdeaXR调用此方法以将控件的get_drag_data返回的data传递给您。IdeaXR首先调用can_drop_data以测试是否允许将data放置在此控件的position处。

func can_drop_data(position, data):
return typeof(data) == TYPE_DICTIONARY and data.has("color")

func drop_data(position, data):
color = data["color"]

  • force_drag force_drag(data: Variant, preview: Control)

通过传递datapreview强制拖动并绕过get_drag_dataset_drag_preview。即使鼠标既不在该控件上,也未在该控件上按下,都将开始拖动。

方法can_drop_datadrop_data必须在接收拖拽数据的控件上实现。


  • get_anchor get_anchor(margin: int) const

返回由margin指定的锚,margin取值为Margin枚举。这是anchor_bottomanchor_leftanchor_rightanchor_top的getter方法。


  • get_begin get_begin() const

返回margin_leftmargin_top。另请参见rect_position


  • get_color get_color(name: String, type: String = "") const

返回具有给定name并与给定typeControl关联的当前Theme的颜色。

func _ready():
modulate = get_color("font_color", "Button") # 获取为按钮字体定义的颜色

  • get_combined_minimum_size get_combined_minimum_size() const

返回rect_min_sizeget_minimum_size组合的最小大小。


  • get_constant get_constant(name: String, type: String = "") const

返回具有给定name并与给定typeControl关联的当前Theme的一个常数。


  • get_cursor_shape get_cursor_shape(position: Vector2 = Vector2( 0, 0 )) const

返回控件在鼠标悬停时显示的鼠标光标形状。参见CursorShape


  • get_drag_data get_drag_data(position: Vector2) virtual

IdeaXR调用此方法以获取可以拖放到控件上的数据。如果没有要拖动的数据,则返回null。想要接收数据的控件应实现can_drop_datadrop_dataposition在此控件的局部空间中。可以使用force_drag强制拖动。

可以使用set_drag_preview设置跟随鼠标的预览。

func get_drag_data(position):
var mydata = make_data()
set_drag_preview(make_preview(mydata))
return mydata

  • get_end get_end() const

返回margin_rightmargin_bottom


  • get_focus_neighbour get_focus_neighbour(margin: int) const

返回由取值为Marginmargin指定的焦点邻居。这是focus_neighbour_bottomfocus_neighbour_leftfocus_neighbour_rightfocus_neighbour_top的getter方法。


  • get_focus_owner get_focus_owner() const

返回具有键盘焦点的控件,如果没有则返回null


  • get_font get_font(name: String, type: String = "") const

返回具有给定name并与给定typeControl关联的当前Theme的字体。


  • get_global_rect get_global_rect() const

返回控件相对于屏幕左上角的位置和大小。请参阅rect_positionrect_size


  • get_icon get_icon(name: String, type: String = "") const

返回具有给定name并与给定typeControl关联的当前Theme的一个图标。


  • get_margin get_margin(margin: int) const

返回由取值为Marginmargin指定的边界距离。这是margin_bottommargin_leftmargin_rightmargin_top的getter方法。


  • get_minimum_size get_minimum_size() const

返回此控件的最小大小。参见rect_min_size


  • get_parent_area_size get_parent_area_size() const

返回父控件中占用的宽度/高度。


  • get_parent_control get_parent_control() const

返回父控件节点。


  • get_rect get_rect() const

返回相对于父控件左上角的控件的位置和大小。请参阅rect_positionrect_size


  • get_rotation get_rotation() const

返回旋转角(以弧度为单位)。


  • get_stylebox get_stylebox(name: String, type: String = "") const

返回具有给定name并与给定typeControl关联的当前ThemeStyleBox


  • get_tooltip get_tooltip(at_position: Vector2 = Vector2( 0, 0 )) const

返回工具提示,当光标停留在该控件上时将显示该工具提示。请参阅hint_tooltip


  • grab_click_focus grab_click_focus()

创建一个尝试单击该控件的InputEventMouseButton。如果接收到事件,则控件获取焦点。

func _process(delta):
grab_click_focus() # 单击另一个控件节点时,将改为单击此节点

  • grab_focus grab_focus()

获取焦点,并成为焦点控件(请参阅focus_mode)。


  • has_color has_color(name: String, type: String = "") const

如果在当前Theme中存在具有给定name且与给定typeControl关联的Color,则返回true


  • has_color_override has_color_override(name: String) const

如果具有给定nameColor在此Control节点中有覆盖,则返回true


  • has_constant has_constant(name: String, type: String = "") const

如果在当前Theme中存在具有给定name且与给定typeControl关联的常量,则返回true


  • has_constant_override has_constant_override(name: String) const

如果具有给定name的常量在此Control节点中有覆盖,则返回true


  • has_focus has_focus() const

如果这是当前的焦点控件,则返回true。参见focus_mode


  • has_font has_font(name: String, type: String = "") const

如果当前Theme中存在具有给定name且与给定typeControl关联的字体,则返回true


  • has_font_override has_font_override(name: String) const

如果具有给定name的字体在此Control节点中有覆盖,则返回true


  • has_icon has_icon(name: String, type: String = "") const

如果在当前Theme中存在具有给定name并与给定typeControl关联的图标,则返回true


  • has_icon_override has_icon_override(name: String) const

如果具有给定name的图标在此Control节点中有覆盖,则返回true


  • has_point has_point(point: Vector2) virtual

用户要实现的虚方法。返回给定的point是否在此控件内。

如果用户未实现,则默认行为是检查该点是否在控件的Rect之内。

注意:如果要检查控件中是否有点,可以使用get_rect().has_point(point)


  • has_shader_override has_shader_override(name: String) const

如果具有给定nameShader在此Control节点中有覆盖,则返回true


  • has_stylebox has_stylebox(name: String, type: String = "") const

如果在当前Theme中存在具有给定name并与给定typeControl关联的StyleBox,则返回true


  • has_stylebox_override has_stylebox_override(name: String) const

如果具有给定nameStyleBox在此Control节点中有覆盖,则返回true


  • minimum_size_changed minimum_size_changed()

使此节点和父节点(直至最高级别)中的大小缓存无效。当返回值改变时与get_minimum_size一起使用。设置rect_min_size会自动调用此方法。


  • release_focus release_focus()

放弃焦点。其他控件将无法接收键盘输入。


  • set_anchor set_anchor(margin: int, anchor: float, keep_margin: bool = false, push_opposite_anchor: bool = true)

将由取值为Marginmargin指定的锚点设置为anchor。这是anchor_bottomanchor_leftanchor_rightanchor_top的setter方法。

如果keep_margintrue,则在执行此操作后不会更新边距。

如果push_opposite_anchortrue,并且相反的锚点与该锚点重叠,则相反的锚点将覆盖其值。例如,当将左锚点设置为1且右锚点的值为0.5时,右锚点的值也将为1。如果push_opposite_anchorfalse,则左锚点将取值0.5。


  • set_anchor_and_margin set_anchor_and_margin(margin: int, anchor: float, offset: float, push_opposite_anchor: bool = false)

set_anchor的工作原理相同,但不同于keep_margin参数和边距的自动更新,它允许您自己设置边距偏移量(请参阅set_margin)。


  • set_anchors_and_margins_preset set_anchors_and_margins_preset(preset: int, resize_mode: int = 0, margin: int = 0)

设置锚定预设和边距预设。请参见set_anchors_presetset_margins_preset


  • set_anchors_preset set_anchors_preset(preset: int, keep_margins: bool = false)

将锚设置为取值为Control.LayoutPreset枚举的preset。这等效于在2D编辑器中使用“布局”菜单。

如果keep_marginstrue,则控件的位置也会被更新。


  • set_begin set_begin(position: Vector2)

同时设置margin_leftmargin_top。等效于更改rect_position


  • set_drag_forwarding set_drag_forwarding(target: Control)

将此控件的拖拽处理转发到target控件。

可以在目标控件中实现转发,类似于方法get_drag_datacan_drop_datadrop_data,但有两个区别:

1.函数名称必须有_fw后缀

2.该函数必须接受一个额外的参数,即正在执行转发的控件

# ThisControl.gd
extends Control
func _ready():
set_drag_forwarding(target_control)

# TargetControl.gd
extends Control
func can_drop_data_fw(position, data, from_control):
return true

func drop_data_fw(position, data, from_control):
my_handle_data(data)

func get_drag_data_fw(position, from_control):
set_drag_preview(my_preview)
return my_data()

  • set_drag_preview set_drag_preview(control: Control)

在鼠标指针处显示给定的控件。调用此方法最好在get_drag_data中。给定的控件一定不能在场景树中。

export (Color, RGBA) var color = Color(1, 0, 0, 1)

func get_drag_data(position):
# 使用不在场景树中的控件
var cpb = ColorPickerButton.new()
cpb.color = color
cpb.rect_size = Vector2(50, 50)
set_drag_preview(cpb)
return color

  • set_end set_end(position: Vector2)

同时设置margin_rightmargin_bottom


  • set_focus_neighbour set_focus_neighbour(margin: int, neighbour: NodePath)

将由margin指定的焦点邻居设置为neighbor指定的Control。这是focus_neighbour_bottomfocus_neighbour_leftfocus_neighbour_rightfocus_neighbour_top的setter方法。


  • set_global_position set_global_position(position: Vector2, keep_margins: bool = false)

rect_global_position设置为position

如果keep_marginstrue,则控件的锚点将被更新,而不是边距。


  • set_margin set_margin(margin: int, offset: float)

将由margin指定的边距设置为offset。这是margin_bottommargin_leftmargin_rightmargin_top的setter方法。


  • set_margins_preset set_margins_preset(preset: int, resize_mode: int = 0, margin: int = 0)

将边距设置为取值为Control.LayoutPresetpreset。这等效于在2D编辑器中使用“布局”菜单。

使用取值为Control.LayoutPresetMode的参数resize_mode,可以更好地确定Control的大小。如果将常量值与更改大小的预设一起使用,则其会被忽略,例如PRESET_LEFT_WIDE

使用参数margin确定Control和边缘之间的间隙。


  • set_position set_position(position: Vector2, keep_margins: bool = false)

rect_position设置为position

如果keep_marginstrue,则控件的锚点将被更新,而不是边距。


  • set_rotation set_rotation(radians: float)

设置旋转角(以弧度为单位)。


  • set_size set_size(size: Vector2, keep_margins: bool = false)

设置大小(请参阅rect_size)。

如果keep_marginstrue,则控件的锚点将被更新,而不是边距。


  • show_modal show_modal(exclusive: bool = false)

将控件显示为模态。控件必须是一个子窗口。模态控件会捕获输入信号,直到关闭或访问它们外面的区域为止。当模态控件失去焦点或按ESC键时,它们会自动隐藏。模态控件广泛用于弹出对话框和菜单。

如果exclusivetrue,则其他控件将不会收到输入,并且在此控件外部单击不会关闭它。


  • warp_mouse warp_mouse(to_position: Vector2)

将鼠标光标移动到to_position,该Controlrect_position的相对位置。