Qt的類型系統(tǒng)設(shè)計(jì)的很精妙,本身的200多個(gè)class/struct都已經(jīng)注冊(cè),1024后的index留給了用戶注冊(cè),都是在運(yùn)行的時(shí)候注冊(cè),同時(shí)注冊(cè)了Destruct和Construct,為了后面的placement new留好了接口。
如果作為獨(dú)立的app是沒有問題的,QAppliction和程序?qū)儆谕粋€(gè)生命周期,同時(shí)消亡同時(shí)誕生,沒有彼此的分別,但作為插件,比如在Microstaion平臺(tái)上,Microstaion在對(duì)話期一直存在一個(gè)QApplication實(shí)例,但各個(gè)插件可以在卸載與加載之間往復(fù),QMetaType則對(duì)此欠考慮,如果一個(gè)插件卸載,則它的類型和Destruct和Construct都還存在,在重新加載插件后,用接口創(chuàng)建的時(shí)候,還是舊的地址,如果插件的地址還是舊的地址,則Destruct和Construct都還有效,反之,則會(huì)crash。
這些注冊(cè)的類型沒有接口刪除,唯一的一個(gè)接口,還不能刪除由Q_DECLEAR_METETYPE 聲明的類型,只能刪除由qRegisterMetaType注冊(cè)的類型...
只能動(dòng)動(dòng)Qt的根了,那就是QtCore模塊,QtCore是所有其他模塊的基礎(chǔ)包括GUI模塊。
能修改源碼的自由度,是使用閉源庫的兄弟不能理解的幸福啊。。。
雖然編譯整個(gè)庫需要幾個(gè)小時(shí),編譯QtCore卻只要幾分鐘。。。
讓我的Qt插件在Microstation上飛。。。



圖中的插件是QCustomPlot,對(duì)大數(shù)據(jù)兼容好,整個(gè)庫也很小,和QCharts和qwt一樣,他們作為插件使用的時(shí)候都有bugs,我只是改正了QCustomPlot的問題,其他兩個(gè)改不動(dòng),放棄掙扎了。。。