Slint 全局单例

Slint 全局单例

定义一个全局单例的实例需要使用到global Name { /*各种属性和回调函数*/} 的方式,以使属性和回调在整个项目中可用。使用 Name.property 访问它们。

1
2
3
4
5
6
7
8
9
10
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;
}

导出全局以使其可从其他文件访问(请参阅模块Modules)。从文件中导出全局变量,同时导出主应用程序组件,以使其对业务逻辑中的本机代码可见。

1
2
3
4
export global Logic  {
in-out property <int> the-value;
pure callback magic-operation(int) -> int;
}

在Rust中的使用方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
slint::slint!{
export global Logic {
in-out property <int> the-value;
pure callback magic-operation(int) -> int;
}

export component App inherits Window {
// ...
}
}

fn main() {
let app = App::new();
app.global::<Logic>().on_magic_operation(|value| {
eprintln!("magic operation input: {}", value);
value * 2
});
app.global::<Logic>().set_the_value(42);
// ...
}

在C++中的使用方式

1
2
3
4
5
6
7
8
9
10
#include "app.h"

fn main() {
auto app = App::create();
app->global<Logic>().on_magic_operation([](int value) -> int {
return value * 2;
});
app->global<Logic>().set_the_value(42);
// ...
}

可以使用双向绑定语法从全局重新公开回调或属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
global Logic  {
in-out property <int> the-value;
pure callback magic-operation(int) -> int;
}

component SomeComponent inherits Text {
// use the global in any component
text: "The magic value is:" + Logic.magic-operation(42);
}

export component MainWindow inherits Window {
// re-expose the global properties such that the native code
// can access or modify them
in-out property the-value <=> Logic.the-value;
pure callback magic-operation <=> Logic.magic-operation;

SomeComponent {}
}

Slint 全局单例
http://cvrain.cloudvl.cn/2024/01/15/Slint/slint-global-singletions/
作者
ClaudeRainer
发布于
2024年1月15日
许可协议