整体工程结构

deepin-topbar源码阅读及问题记录
dbus是和DDE交互的接口,也就是DDE API,大多是Go实现
frame是主控
interfaces是实现topbar module必须实现的接口
widgets是topbar封装的一些常用组件
自己扩展的话,主要是写modules

原理及实现

  • 工程跑起来后,界面是怎么构成的
    MainPanel的构造函数会调用MainPanel::reload()->loadModules()
    deepin-topbar源码阅读及问题记录
  • 如何编写新的module
    找到最简单的module是时间和搜索,以时间module为例分析新的module如何编写
    deepin-topbar源码阅读及问题记录
    (很久没画类图了,不知道这个图对不对)
    主要实现接口中的几个方法就行了。奇怪的是,接口中已经有代理类的保护字段了,为啥新的module还要定义一个私有字段
    deepin-topbar源码阅读及问题记录
    deepin-topbar源码阅读及问题记录
    这里有几个问题
    新的module放在topbar的哪个位置?右键点击时怎么处理,左键点击的时候怎么处理?生命周期如何(因为C++没有垃圾回收)?
    新的module位置拥有的widget放在QHBoxLayout中,基本是靠右放了
    对于点击事件的处理,最后所以的module都会包到PluginsItem中,而这个类对点击事件的处理是mouseReleaseEvent -> showTips -> module的itemContextMenu 最后把菜单包裹到PopupWindow,这个PopupWindow也是我很不喜欢的一个东西,╭(╯^╰)╮,所以不区分左键右键,都一个样
    至于生命周期,reload函数处理了每次的销毁和重建,但是没看到最后的销毁
    deepin-topbar源码阅读及问题记录
  • 混乱的module和plugin
    在源码中,有3个接口
    deepin-topbar源码阅读及问题记录
    其中ModuleItemInterface是没有使用的,但是接口和PluginsItemInterface有很大的相似性

我的需求

我现在最想做的就是system info (e.g. cpu, memory, disk historical graph),topbar中我最喜欢的就是显示网速的那个deepin-topbar源码阅读及问题记录
其实,自己用没必要那么准,但是有的时候(比如maven下载依赖的时候),发现没有速度还是需要处理一下的
希望显示cpu,内存什么的,编译的时候,或者比较卡的时候,自己可以提前有个准备,也好给个心里暗示。

其他

发现bug,修改设置后会出现
deepin-topbar源码阅读及问题记录

相关文章:

  • 2021-05-08
  • 2022-02-08
  • 2021-08-14
  • 2021-12-31
  • 2021-09-18
  • 2021-10-04
  • 2021-04-05
猜你喜欢
  • 2021-11-30
  • 2021-11-24
  • 2022-01-14
  • 2021-12-10
  • 2021-05-26
  • 2021-12-06
  • 2022-01-01
相关资源
相似解决方案