rust编程 UI框架 -druid -Selector选择器

本文详细介绍了Druid框架中选择器(Selector)的概念,它作为一个唯一标识符,用于命令处理。同时阐述了AppDelegate的角色,它是处理和修改顶级事件的入口,包括事件处理、命令处理、窗口添加和删除的回调。文中还提到了异步处理的实现,帮助读者深入理解如何在Druid中自定义事件流程。
摘要由CSDN通过智能技术生成

Selector是一个特殊命令的标识符
这应该是一个唯一的字符串标识符。不允许使用具有相同标识符但不同有效负载类型的多个选择器,这可能导致 Command: : get 和 get _ uncheck 出现恐慌。
Type 参数 T 指定命令的有效负载类型
某些选择器是由druid定义的,并且对框架有特殊的意义; 它们在druid: : commands 中列出

pub const NOOP: Selector

一个什么都不做的选择器

pub fn to(self, target: impl Into<Target>) -> Command

将其转换为具有指定 Target 的命令。

pub const fn new(s: &'static str) -> Selector<T>

用给定的字符串创建一个新的 Selector。

pub fn with(self, payload: T) -> Command

这个选择器为 Command: : new 提供了方便的方法。
如果有效负载是() ,就不需要调用这个函数,因为 Selector < () > 实现 Into < Command > 。
默认情况下,该命令将具有 Target: : Auto。

选择器和AppDalegate使用
AppDalegate提供用于处理和修改顶级事件的挂钩的类型。
AppDalegate是一种特性,允许在事件传递到小部件树之前处理和修改事件。
对于窗口和菜单管理来说,这是一个很自然的地方。
可以通过在自己的类型上实现其方法来自定义 AppDalegate。

pub fn event(
    &mut self,
    ctx: &mut DelegateCtx<'_>,
    window_id: WindowId,
    event: Event,
    data: &mut T,
    env: &Env
) -> Option<Event>

此函数接收所有非命令事件,然后再向下传递。
这个函数的返回值将在树中传递。这可以是传入的事件、不同的事件或没有事件。在所有情况下,update ()方法都将像往常一样调用。

pub fn command(
    &mut self,
    ctx: &mut DelegateCtx<'_>,
    target: Target,
    cmd: &Command,
    data: &mut T,
    env: &Env
) -> Handled

应用委托命令处理程序。
这个函数在每个(Target,Command)对被发送到树之前被调用。
如果您的实现返回 Handled::No,该命令将沿小部件树发送。否则不会。
要做比这更复杂的事情,您可以通过 DelegateCtx::submit_command 提交任意命令。

pub fn window_added(
    &mut self,
    id: WindowId,
    data: &mut T,
    env: &Env,
    ctx: &mut DelegateCtx<'_>
)

窗口创建事件的处理程序。该函数在添加窗口后调用,允许您自定义应用程序的窗口创建行为。

pub fn window_removed(
    &mut self,
    id: WindowId,
    data: &mut T,
    env: &Env,
    ctx: &mut DelegateCtx<'_>
)

窗口删除事件的处理程序。此函数在窗口被删除后调用。

下一章使用选择器和AppDelegate实现异步处理
效果图
效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若梦网络编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值