这次突发奇想,想给peony写个插件用来扩展一些文件属性的东西,在gitee上和开发讨论了一下,是可以实现的,我就把peony的代码拉了下来,开发建议我参考一下peony-share的代码,peony的代码里也有一些扩展或者说是插件的代码,但是目前的测试来看是不能使用(过期了),总的来说是这样的。
peony提供了,文件系统,工具栏,文件属性页,菜单,视图,预览,风格等插件的接口,还有一个我不知道是用来做什么的,看起来像是和文件图标有关联,我这次是用文件属性页的插件接口做的demo。
具体实现是要继承properties-window-tab-page-plugin-iface.h头文件里声明PropertiesWindowTabPagePluginIface类的接口,然后具体的调用或者是说显示需要继承properties-window-tab-iface.h里的Peony::PropertiesWindowTabIface,然后在properties-window-tab-page-plugin-iface.h的createTabPage里返回继承了Peony::PropertiesWindowTabIface类的插件主体的实例,我的理解是properties-window-tab-page-plugin-iface.h是告诉peony这是一个插件,然后在继承了Peony::PropertiesWindowTabIface的类里实现自己需要的方法,返回给peony去渲染。
整个Peony::PropertiesWindowTabIface里的方法很少,基本只有一个页面改变和保存的方法。
PropertiesWindowTabPagePluginIface里的东西不多,tabOrder应该是整个tab的排序,supportUri时候控制是否显示的true是显示,false是不显示,createPage则是具体的内容显示,之前的demo里写的返回类型是QWidget,现在改成PropertiesWindowTabIface应该是考虑到QWidget类型可能不太灵活,所以做成现在这样。
首先使用qtcreator建立一个新的项目,然后类型选择lib,在项目的pro文件CONFIG里加上plugin(必须),这样可以让生成的so库文件不带版本,方便拷贝,在实现PropertiesWindowTabPagePluginIface的时候需要用
Q_PLUGIN_METADATA(IID PropertiesWindowTabPagePluginIface_iid FILE "common.json")
这句来声明插件匹配的peony版本,common.json是一个json内容的文件,文件名字应该是可以自定义的,目前文件里只有一个字段,就是version,内容是需要和自己本机的peony定义的宏VERSION匹配,但是这个宏是在pri文件里写的,没有在头文件里,最简单的就是看关于页面的版本,这个就是直接返回的VERSION这个定义。
两个类都写好以后就可以直接构建生成so文件,然后放到/usr/lib/x86_64-linux-gnu/peony-extensions里就可以,重新加载只需要关闭peony的进程再打开就可以,简单的说就是关闭文件管理器再打开就会重新加载库文件。
因为不太会qt所以有些说法可能不太标准,可以参考peony-share的实现,项目目前的名字是peony-extensions,这个是peony的官方插件的名字,里边有很多个插件的实现,可以对照着实现自己的插件