【Rust GUI开发入门】编写一个本地音乐播放器(10. 拼装UI组件) - Jordan

news/2025/9/30 22:51:09/文章来源:https://www.cnblogs.com/Jordan-Haidee/p/19121882

本系列教程对应的代码已开源在 Github zeedle

将前文写的零散的UI组件(歌曲列表/播放控制面板/歌词面板/设置面板)拼装起来,组成最终的音乐播放器UI,用TabWidget分成多标签页,每一个标签页分担不同的功能:

player.png

export component MainWindow inherits Window {preferred-width: 850px;preferred-height: 500px;min-width: 850px;min-height: 500px;title: "Zeedle";icon: @image-url("cover.svg");callback toggle_play();callback play(SongInfo, TriggerSource);callback play_next();callback play_prev();callback change_progress(float);callback switch_mode(PlayMode);callback refresh_song_list(string);callback sort_song_list(SortKey, bool);callback set_lang(string);pure callback format_duration(float) -> string;public function set_light_theme(yes: bool) {UIState.light_ui = yes;if (yes) {Palette.color-scheme = ColorScheme.light;} else {Palette.color-scheme = ColorScheme.dark;}}tabs := TabWidget {Tab {title: @tr("Gallery");VerticalLayout {SongListView {ascending <=> UIState.sort_ascending;sort-key <=> UIState.sort_key;last-sort-key <=> UIState.last_sort_key;song-list <=> UIState.song_list;sort-songs(key, asc) => {root.sort_song_list(key, asc);}play-song(info, src) => {root.play(info, src);}}ControlPanel {max-height: 80px;min-height: 50px;preferred-height: 60px;progress <=> UIState.progress;duration <=> UIState.duration;paused <=> UIState.paused;dragging <=> UIState.dragging;play_mode <=> UIState.play_mode;current_song <=> UIState.current_song;album_image <=> UIState.album_image;change-progress(p) => {root.change_progress(p);root.focus();}toggle-play() => {root.toggle_play();}play-next() => {root.play_next();}play-prev() => {root.play_prev();}switch-mode(m) => {root.switch_mode(m);}double-clicked() => {tabs.current-index = 1; // 切换到歌词页}format-duration(d) => {return root.format_duration(d);}}}}Tab {title: @tr("Lyrics");Rectangle {width: 100%;height: 100%;z: -5;TouchArea {double-clicked => {tabs.current-index = 0; // 切换到歌曲列表页}}}LyricsPanel {width: 100%;height: 100%;album_image <=> UIState.album_image;current_song <=> UIState.current_song;lyrics <=> UIState.lyrics;progress <=> UIState.progress;lyric_viewport_y <=> UIState.lyric_viewport_y;}}Tab {title: @tr("Settings");SettingsPanel {width: 100%;height: 100%;song_dir <=> UIState.song_dir;lang <=> UIState.lang;light_ui <=> UIState.light_ui;refresh_song_list(p) => {root.refresh_song_list(p);}set_lang(l) => {root.set_lang(l);}set_light_theme(yes) => {root.set_light_theme(yes);}}}Tab {title: @tr("About");Text {width: 100%;height: 100%;font-size: 16px;text: UIState.about_info;horizontal-alignment: center;vertical-alignment: center;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优易官方网站wordpress+快讯

Microsoft Visio 参与者 [actor] - 人的形状图标 1. 更多形状 -> 搜索形状2. 参与者References 1. 更多形状 -> 搜索形状 2. 参与者 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

破解 Pycharm

破解 Pycharm破解工具:下载链接: https://pan.baidu.com/s/1C4BB55LXPxW4s9lZlFt4FA?pwd=s5jc 提取码: s5jc 破解完成后,这个目录依然不能删除,否则破解失效。所以可将该目录保存至一个很少打开的位置。 先执行…

个人网站申请备案iis7.5 没有默认网站

当我们在浏览器中输入一个URL并按下回车键时&#xff0c;背后其实发生了一系列的复杂过程。这个过程涉及到了网络协议、服务器处理、数据传输等多个环节。下面&#xff0c;我们将详细解析这一过程。 一、URL解析 当我们在浏览器中输入URL并回车后&#xff0c;浏览器首先会进行…

织梦网站地图底部漯河优惠网站建设价格

04数组矩阵 顺时针打印二维数组 0所在行列清零 z字形打印二维数组 找出边界为1的最大子方针 返回子数组最大累加和 子矩阵最大累加和 矩阵运算 顺时针打印二维数组 int[][] arr {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20}};int r 0;int c 0;int…

网站的服务费账怎么做手表网站欧米茄

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 目录一、概念二、带权路径长度三、树的带权路径长度四、举…

网站域名怎么缴费深圳有多少互联网公司

算术平均数&#xff08;average&#xff09;是一组数据相加后除以数据的个数而得到的结果&#xff0c;是度量数据水平的常用统计量&#xff0c;在参数估计和假设检验中经常用到。比如&#xff1a;用职工平均工资来衡量职工工资的一般水平&#xff0c;用平均体重来观察某一人群体…

基于php的家具公司网站学设计师需要学历吗

俗话说“民以食为天”&#xff0c;吃饭一向是国人的头等大事&#xff0c;餐饮业也是经济的强劲助推力。新世纪以来&#xff0c;餐饮业不断讲述着热辣滚烫的商业故事。 2006年&#xff0c;拥有“必胜客”、“肯德基”等品牌的餐饮巨头百胜集团&#xff0c;组织两百多名区域经理…

CAP 8.4 版本发布通告

前言 今天,我们很高兴宣布 CAP 发布 8.4 版本正式版。从 8.3.0 版本以来,我们陆续发布了 5 个小版本,在这些版本中我们主要专注于提升系统性能、增强 Dashboard 功能、改进存储提供程序支持,并修复了一系列已知问题…

免费名片在线设计网站小程序外包公司发展前景

目前开发命名规范基本都遵循驼峰命名法&#xff0c;如&#xff1a;userName。我也不将这个规范的特性了&#xff0c;大家都明白。接下来进入正题&#xff0c;如何在python中取一个好名字&#xff0c;让你能更好的见名知意呢&#xff1f;1.元组(Tuple)类型变量命名在python中Tup…

【Leetcode】随笔 - 详解

【Leetcode】随笔 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

STM32 智能垃圾桶项目笔记(一):超声波模块(HC-SR04)原理与驱动实现 - 教程

STM32 智能垃圾桶项目笔记(一):超声波模块(HC-SR04)原理与驱动实现 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

DevEco Studio 编辑器的使用 - 实践

DevEco Studio 编辑器的使用 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

docker安装MySQL8.0.25的坑

一、搜索拉取镜像 docker search mysql docker pull mysql #不写版本号 默认拉取最新版本 docker pull mysql:8.0.25 #写版本号,则拉取确定的版本二、查看镜像 docker images三、启动镜像 docker run -d --name mysql…

Powershell维护系统管理任务(五)

Powershell维护系统管理任务目录维护系统管理任务管理 AD 域服务管理组和组成员身份管理组创建新组管理组成员身份管理计算机帐户新建计算机帐户修复计算机账户的信任关系账户与设备管理cmdlet的区别管理组织单位和 AD…

百度的网站名山东省建设项目监理协会网站

前言&#xff1a; pad 是每个 element实例 都有的&#xff0c;是 elemenet 之间沟通的代理人&#xff0c;没有 pad 的 element 没法于其他element交流。 考虑到gstreamer存在继承体系&#xff0c;那么如果继承类element不在init函数里创建pad&#xff0c;那么在gst_element_l…

软件测试工程师面试刷题:简单JAVA算法题以及解法

软件测试工程师面试刷题:简单JAVA算法题以及解法找不同给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。示例 1: 输入:s =…

济南专业的设计网站免费网站建设 百度收录

NVIDIA Corporation 在 GitHub 的官方主页 References https://github.com/NVIDIA References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

蚌埠做网站有哪些公司买个域名

本文主要向大家详细介绍了jQuery的绑定事件和移除事件的使用方法和示例分享&#xff0c;这里推荐给有需要的小伙伴们参考下。有时候事件执行完了&#xff0c;想取消事件的效果可以通过一定的办法来处理。比如bind()(绑定事件)和unbind()(移除通过bind()方法添加的事件)方法来移…

巩义网站建设价格天津滨海新区落户政策

前言 这是我在这个网站整理的笔记&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;RodmaChen PostgreSQL--实现数据库备份恢复详细教学 一. 数据库备份二. 数据库恢复三. 存留问题 数据库备份恢复功能是每个产品所需的&#xff0c;以下是简单的脚本案例&a…

实用指南:React基础到进阶

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …