Skip to content
This repository has been archived by the owner on Jul 27, 2024. It is now read-only.

BBDXF/PWQsystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#PWQsystem#

Python with Qml Plugin Framework sysytem / Python with Qt plugin system
使用 QML/Qt 的 Python 插件框架系统

##简介## ###想法的由来### 这个想法的由来是因为工作中一直需要修改某几个项目的用户交互内容(C++项目),修改的次数少了还好,随着需求提出的越来越多,甚至到了最后已经距离原本的设计偏离了十万八千里,我还得改!
这时,一个十分突出的问题就来了,设计与需求相差越来越大,想要不伤筋动骨地增添一些功能,就变得如同走钢丝一样危险。这时的选择就两种:
1、不惜一切代价,在原程序上不断打补丁。
2、重构 所有 源代码。

打补丁就是饮鸩止渴,找了一个机会,我选择了重构,尽管我根据当前的需求,从底到头,重构了整个项目,并且留下了我认为足够多的修改空间,使用后的很长一段时间都很好,无论做什么修改都不用再那么提心吊胆了,但是,人的思维都是跳变的,特别是用户的需求是无限的,用了一年后,用户的需求已经不知道里一年前又差了多少个十万八千里了!顿时,我泪崩了!你懂得!
从那时起,我就一直想做一个可以随时修改的插件系统。

###项目初探### 慢慢地,因为部分项目原因,自己开始接触到了Python,处于界面美化和跨平台的目的学习了Qt,14年Qt5又发大功似得整出来了Qt5,特别是QML技术,让Qt可以在各个领域大展手脚。
我原本的设想是使用Qt或者Win32整出来一个界面,使用Python做插件,然后使用jsonrpc技术进行插件与主程序之间的通信,后台使用Python维护一个插件框架,负责管理插件,插件可以使用Python编写直接被调用,也可以使用其他语言编写,然后通过jsonrpc与主程序互动。
这个想法开始觉得挺好的,核心的通信机制和插件框架方案都有了,应该不难实现。在尝试做这个项目时,没想到遇到了一下几个问题:
1、Win32的jsonrpc框架怎么实现?
2、UI层怎么与插件产生互动,特别是数据传递?

第一个问题:解决方案有两个。1、自己实现一个socket server,自己解析json文本,然后自己设计一个rpc方法。(我毫不犹豫地pass掉了,心里明白从一无所有到这一步有多难,最重要的是我只有一个人,根本没有那么多时间和精力完成这么多的东西)2、到网上找开源的库。找到了两个,jsoncpp和jsonrpc-cpp,后者是在前者的基础上完成的。jsoncpp很好玩,但是解决不了什么问题,jsonrpc-cpp很符合我的需求,遗憾的是连一个完整的介绍都找不来!尝试编译和使用它,我尝试了几次就放弃了!
第二个问题:我所了解的C++擅长调用dll来进行UI扩展,主程序主动调用DLL。想要远程调用必定需要开放很多接口,如何进行封装?这种封装如何才能跨平台?

###初步方案### 针对上面的问题,我想到了Python,甚至觉得使用Python本身就可以完整地完成整个项目。界面可以选择PyQt来做,插件机制对Python本身而言本事就是基于插件的,实现起来不难,jsonrpc存在不存在就无所谓了。
哎,又偏离了原本的计划!为此纠结好久!
本着拓展思路的目的,在网上开始了解各种插件框架,发现真的太少了!少到如果有人问这个问题,几乎没人能够给他提供这样类似的建议!
一个偶然的机会,突然想到了自己一直使用的Sublime text,仔细查看了它的目录结构和插件代码,发现Sublime text原来就是最为理想的榜样产品啊!我真的以为救星来了,没想到是Sublime text是闭源的!!!心中那个万马奔腾啊!!
牛人天天有,今年特别少!还好的是我是在这个时候开始查找Sublime text相关的原理等信息。Fredrik Ehnbom用Go语言开发了新代码编译器Lime,号称Sublime Text的开源实现。二话不说,下载了源代码,发现,原来我们的牛人使用go语言做后台,界面使用qml控制,然后使用xmlhttp制作了一个插件管理的工具,按照Sublime text的标准制作了整个程序!虽然,我没学过go语言,上面的内容也是自己看着代码瞎猜的,但是给了我无穷的信心啊!

###我也要实现它### 所以,基本方向定下来了! Qml做界面(我很喜欢这个技术,虽然还不怎么熟悉!),Python做后台逻辑和插件!中间可能会配合PyQt的内容。json做配置管理,rpc不做主要关心的内容!如果以上有什么异议,参考Lime的go语言工程!努力兼容Sublime Text的theme,目标是在可以接受的程度上接近她,然后超越他!(这话说起来感觉有点没底啊!)

##项目重大纪要## ###项目日志### 2014-7-16 创建项目,编写启动文档 2014-7-24 Demoy版本,音乐播放器基础功能完成

###项目人员### master: BBDXF (笨笨D幸福)
寻求志同道合人士合力开发

###其他备注###

zhang206zyx#163.com(自己替换#)
blog.csdn.net/bbdxf
www.cnblogs.com/bbdxf

##使用说明## ###Demo播放器###

Python + PyQt + Phonon
播放器功能 + 插件管理功能 (完成基础内容)

播放器预览:
播放器

插件管理:
插件管理

About

Python with Qt/Qml plugin system

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages