feeluown 阶段性总结
feeluown 阶段性总结
主要介绍:feeluown 的整个结构,以及一些(GUI)开发的感悟
项目定位
Linux 上支持虾米,网易云,QQ三大平台的音乐播放器
背景
- 当时 Linux 的播放器基本不支持在线音乐播放。大部分音乐播放器只支持:last.fm 等音乐平台。
- 存在一些第三方音乐播放器:类似 deepin music player,支持百度音乐, kuwo 酷我音乐, 虾米电台,功能简陋把
- 当时网易云音乐正在占据大部分市场
- 个人用着 Linux,闲着无聊,觉得爬爬网站貌似还挺有趣(这个是主要原因,目测)
项目迭代的一些过程
- 第一版
- 第二版
- 中间一个成熟的版本
- 发版截图
- …
- 现在…
GUI 软件开发概述
流行的 GUI 库:Linux 上主要是 GTK,Qt。Windows 上 MFC,Mac OSX cocoa。 跨平台:gtk, wxWidgets, Qt。 GPU 加速的 gui 库:Gac (vczh 貌似在知乎上也很有名的)
Qt 接口比较好用,wxWidgets 比较丑,GTK 官方后来才正式支持多平台 许多嵌入式系统界面也会采用 qt 。
Qt 出了个 QML 也能开发安卓软件。不过 QML 对 PC 平台支持不是特别完善。 (Qt 本省不仅仅提供了 GUI 相关的功能,还有一些网络请求,OpenGL 的封装等)
最新的一些做 GUI 的工具:Electron, nw.js。 据说前者优于后者,且有成熟应用。
pyqt5 最简单的 demo
- http://zetcode.com/gui/pyqt5/firstprograms/
python3 /tmp/gui.py
- 定义一个布局(有网格布局,水平Box布局等)
- 往布局里面塞一堆控件(和 HTML 很像,button,label等)
- 控件上绑定各种事件(比如点击事件,鼠标 hover 事件)
关于 GUI,可能会有这些些问题:
- 进度条怎么做的?
- 透明、阴影等特效怎么做?
- 顶部 panel 的图标怎么弄?
- 怎样显示系统通知?
- 怎样置顶?
- 音乐播放器怎样控制?
关于音乐播放器,有这些一些概念:
关于 Linux, 有个 D-BUS 的东西和开发联系比较紧密
感觉和安卓,IOS开发应该也很类似
很久很久以前写安卓 2.3 的时候:它也是一个 layout.xml 文件加上各种事件响应 activity
和游戏 UI 开发也很类似
GUI 开发的不同的点(相对于 Web 开发)
Signal 机制
GUI 中,UI 逻辑会占据大部分代码。
GUI 界面渲染的过程
一个 widget,它会定时刷新自己的页面(每次都会调用一个叫做 paintEvent
的函数)。
所以可以通过重写这个函数来自定义界面长相,也可以通过类似 css 的东西来定义界面样式
GUI 软件发布之后不能在服务端更新它。需要玩家主动升级
测试相对较难
之前本来有集成测试的(目前没测试…)
项目开发过程中主要解决的几个技术问题
- UI 美化 -> 重写绘图函数
- 网络操作 -> quamash(asyncio+qt event-loop)
- 插件机制 -> 规范接口
- 主题更换机制 -> 统一接口
- 音乐资源获取 -> 抓包
- 远程控制 -> 目前有个非常简单的 udp server,感觉需要 RPC ?
- 歌曲缓存(想做到像视频缓存那样) -> 但是目前没解决…(播放器核心不是自己写的,也没看它提供什么接口)
neovim 插件开发
vim 插件开发的实质:就是把我们平常按键的顺序写到代码中,进行一些错误判断,然后绑定各种 key。
2018-2-17 更新
回头看看,上面这个文章写的好像没啥重点。现在再来写总结文章的话, 或许会重点写这几个方面(从易到难)。
- GUI 库的选择?Qt vs Gtk vs …
- 网易云音乐 API?爬虫基础
- MVC 结构?高年级的学生基本都了解这个概念了。
- GUI 程序‘主体’是一个事件循环;signal/slot 机制有利于代码解耦。
- GUI 绘图原理?我也不是很清楚,写起来应该是有点意思的。
- asyncio 是个啥,有啥用?loop.call_soon 等函数挺实用的。
- linux D-Bus 是个啥?我也不懂
总的来说,这个项目用到的东西都很基础。 但每个技术点要深入研究的话,都可以大做文章把。
Comments