当前位置: 首页 > news >正文

Rust Slint 实现控件拖动详细教程

Rust Slint 实现控件拖动详细教程

  • 一、源码分享
    • 1、效果展示
    • 2、源码分享
  • 二、实现原理
    • 1、基本用法
    • 2、主要属性
    • 3、事件处理
    • 4、高级用法
    • 5、注意事项

一、源码分享

1、效果展示

在这里插入图片描述

2、源码分享

import { AboutSlint, VerticalBox, LineEdit, HorizontalBox, Button, GroupBox, GridBox, ComboBox, Spinner, Slider, ListView, Palette, ProgressIndicator, CheckBox, Switch } from "std-widgets.slint";export component MainWindow inherits Window {min-width: 700px;min-height: 50px;preferred-width: 1300px;preferred-height: 850px;title: "Slint Demo";background: #f0f0f0;private property <Point> pressed_point;private property <bool> is_pressed: false;Rectangle {width: 100px;height: 100px;background: red;TouchArea {pointer-event(event) => {if event.kind == PointerEventKind.down && event.button == PointerEventButton.left {root.is_pressed = true;root.pressed_point.x = self.mouse-x;root.pressed_point.y = self.mouse-y} else if event.kind == PointerEventKind.up && event.button == PointerEventButton.left {root.is_pressed = false;}}moved => {if(root.is_pressed){parent.x += self.mouse-x - root.pressed_point.x;parent.y += self.mouse-y - root.pressed_point.y;}}}}
}

二、实现原理

主要通过TouchArea 监听鼠标位置,从而改变x、y属性实现。

TouchArea是Slint UI框架中用于处理触摸和鼠标事件的透明区域组件。它本身不可见,但可以捕获用户的交互行为并触发回调函数。

1、基本用法

在.slint文件中声明TouchArea:

import { TouchArea } from "std-widgets.slint";export component MyComponent {TouchArea {width: 100px;height: 50px;clicked => { /* 处理点击事件 */ }}
}

2、主要属性

  • widthheight:定义触摸区域尺寸
  • enabled:布尔值,控制是否响应用户交互
  • has-hover:布尔值,指示是否检测悬停状态
  • pressed:布尔属性,反映当前按压状态

3、事件处理

TouchArea支持多种交互事件:

TouchArea {clicked => { /* 单击事件 */ }double-clicked => { /* 双击事件 */ }moved => { /* 移动事件 */ }
}

4、高级用法

结合其他组件实现交互效果:

export component ToggleButton {in-out property <bool> checked;width: 40px;height: 20px;TouchArea {width: parent.width;height: parent.height;clicked => {root.checked = !root.checked;}}
}

5、注意事项

  • TouchArea会拦截所有触摸/鼠标事件,阻止事件向父组件传递
  • 多个重叠的TouchArea组件中,只有最上层的会接收事件
  • 在移动端开发时,建议设置合理的触摸区域大小(至少48x48像素)

在这里插入图片描述

http://www.dtcms.com/a/434312.html

相关文章:

  • 4. Pandas 数据选择、查询与修改
  • React新闻发布系统 角色列表篇
  • 网站常用插件wordpress自定义应用
  • 衡水手机网站建设淮安市盱眙县建设局网站
  • iPhone美区账号登录指南:轻松下载ChatGPT应用
  • AI大模型:(三)1.6 Dify工作流快速搭建数据可视化助手
  • 软件/网站安全需要以及解决方法
  • 做设备推广的网站学做网站用谁的书
  • python 做网站速度网站建设及托管合同
  • Coze源码分析-资源库-编辑工作流-后端源码-数据存储/安全/错误
  • 什么是Java反射机制?
  • 使用Docker安装Neo4j
  • 建立网站的步骤筝晃湖南岚鸿官网深圳专业建设网站哪个公司好
  • 20软件测试需求分析评审
  • SQL 多表查询实用技巧:ON 和 WHERE 的区别速览
  • 网站备案 内容央企八大设计院
  • 从汇编角度看C++优化:编译器真正做了什么
  • 分布式专题——25 深入理解网络通信和TCP、IP协议
  • UV python多版本管理
  • Schema是什么?
  • 许昌做网站优化wordpress 控制每页显示文章数
  • MAX31865模块和PT100实现温度测量使用配置笔记教程
  • Elasticsearch MCP 服务器:与你的 Index 聊天
  • 【ROS2学习笔记】话题通信篇:话题通信再探
  • 网络编程中“地址重用(SO_REUSEADDR)”
  • 汕头网站建设推广厂家wordpress 响应式图片
  • Rust的错误处理
  • 可视化地图
  • Rust与C接口交互
  • 【C++实战(64)】C++ 邂逅SQLite3:数据库编程实战之旅