我没想到要改QtCore
2022-03-08 本文已影响0人
左图右码
Qt的类型系统设计的很精妙,本身的200多个class/struct都已经注册,1024后的index留给了用户注册,都是在运行的时候注册,同时注册了Destruct和Construct,为了后面的placement new留好了接口。
如果作为独立的app是没有问题的,QAppliction和程序属于同一个生命周期,同时消亡同时诞生,没有彼此的分别,但作为插件,比如在Microstaion平台上,Microstaion在对话期一直存在一个QApplication实例,但各个插件可以在卸载与加载之间往复,QMetaType则对此欠考虑,如果一个插件卸载,则它的类型和Destruct和Construct都还存在,在重新加载插件后,用接口创建的时候,还是旧的地址,如果插件的地址还是旧的地址,则Destruct和Construct都还有效,反之,则会crash。
这些注册的类型没有接口删除,唯一的一个接口,还不能删除由Q_DECLEAR_METETYPE 声明的类型,只能删除由qRegisterMetaType注册的类型...
只能动动Qt的根了,那就是QtCore模块,QtCore是所有其他模块的基础包括GUI模块。
能修改源码的自由度,是使用闭源库的兄弟不能理解的幸福啊。。。
虽然编译整个库需要几个小时,编译QtCore却只要几分钟。。。
让我的Qt插件在Microstation上飞。。。
xyz.png
view1.jpg view2.jpg
图中的插件是QCustomPlot,对大数据兼容好,整个库也很小,和QCharts和qwt一样,他们作为插件使用的时候都有bugs,我只是改正了QCustomPlot的问题,其他两个改不动,放弃挣扎了。。。