整体工程结构
dbus是和DDE交互的接口,也就是DDE API,大多是Go实现
frame是主控
interfaces是实现topbar module必须实现的接口
widgets是topbar封装的一些常用组件
自己扩展的话,主要是写modules
原理及实现
- 工程跑起来后,界面是怎么构成的
MainPanel的构造函数会调用MainPanel::reload()->loadModules() - 如何编写新的module
找到最简单的module是时间和搜索,以时间module为例分析新的module如何编写
(很久没画类图了,不知道这个图对不对)
主要实现接口中的几个方法就行了。奇怪的是,接口中已经有代理类的保护字段了,为啥新的module还要定义一个私有字段
这里有几个问题
新的module放在topbar的哪个位置?右键点击时怎么处理,左键点击的时候怎么处理?生命周期如何(因为C++没有垃圾回收)?
新的module位置拥有的widget放在QHBoxLayout中,基本是靠右放了
对于点击事件的处理,最后所以的module都会包到PluginsItem中,而这个类对点击事件的处理是mouseReleaseEvent -> showTips -> module的itemContextMenu 最后把菜单包裹到PopupWindow,这个PopupWindow也是我很不喜欢的一个东西,╭(╯^╰)╮,所以不区分左键右键,都一个样
至于生命周期,reload函数处理了每次的销毁和重建,但是没看到最后的销毁 - 混乱的module和plugin
在源码中,有3个接口
其中ModuleItemInterface是没有使用的,但是接口和PluginsItemInterface有很大的相似性
我的需求
我现在最想做的就是system info (e.g. cpu, memory, disk historical graph),topbar中我最喜欢的就是显示网速的那个
其实,自己用没必要那么准,但是有的时候(比如maven下载依赖的时候),发现没有速度还是需要处理一下的
希望显示cpu,内存什么的,编译的时候,或者比较卡的时候,自己可以提前有个准备,也好给个心里暗示。
其他
发现bug,修改设置后会出现