Skip to content

全局对象

全局对象 是使用 global 关键字在 .slint 文件顶层声明的单例。 它持有在整个项目中共享的属性、回调和函数, 而不是属于某个元素:

global Name {
// property, callback, and function declarations
}
slint

全局对象声明一次并通过名字引用。 它永远不会作为元素实例化;在元素树中写 Name { } 是一个错误。

全局对象的主体可以包含:

  • 属性声明 —— in、out、in-out 或私有,每个都可以有可选的绑定(见属性)。
  • 回调声明 —— 可选为 pure(见回调)。
  • 函数声明 —— 可选为 pure,以及 private、protected 或 public(见函数)。

不允许其他内容。 全局对象不能包含元素或子组件、@children、animate 块、 states、transitions 或 init 回调;每一种都会构成编译错误。

全局对象独立于任何窗口存在,因此它没有缩放因子,也没有默认字体大小。 因此,全局对象内部的表达式不能在逻辑(px)和物理(phx)长度之间转换, 也不能在 rem 和逻辑长度之间转换。

通过全局对象的名字,从项目中的任何绑定、回调或函数, 以及从其他全局对象访问其成员:

Name.property
Name.callback(arguments)
Name.function(arguments)
slint

与所有标识符一样,- 和 _ 可以互换。

全局对象是单例:组件树中的每个组件共享同一个实例。 不同的窗口——以及与某个窗口一起导出的 SystemTrayIcon——各自持有自己的 实例,因此它们的全局对象独立初始化。

global Palette {
in-out property<color> primary: blue;
in-out property<color> secondary: green;
}
export component Example inherits Rectangle {
background: Palette.primary;
border-color: Palette.secondary;
border-width: 2px;
}
slint

导出的全局对象可以导入到其他文件中。 从同时导出应用根组件的文件重新导出的全局对象还会 暴露给原生 API,业务逻辑在其中读取和写入其属性并设置其回调。 全局对象指南展示了各语言的用法。

全局对象的属性或回调可以是双向绑定的目标, 从而在组件上重新暴露它。


© 2026 SixtyFPS GmbH