在跑qtlua interpreter的互動(dòng)模式時(shí),我發(fā)現(xiàn)在Windows版居然沒有QWidget等Qt提供的元件。
這表示在Windows上它完全沒辦法當(dāng)language binding。
說真的,這很奇怪,所以要開始找原因了。
那些預(yù)設(shè)的Qt元件是透過qtluaqmetaobjecttable.cc定義的。
而具體處理這張表的是定義在qtluaqtlib.cc中的QMetaObjectTable。
這個(gè)類別只有生出一個(gè)檔案變數(shù)。
老實(shí)說我真的看不出來這張表有什麼問題,我只好開除錯(cuò)看看是怎麼一回事。
結(jié)果很奇怪的是,在QMetaObjectTable建構(gòu)的時(shí)候,所有Qt內(nèi)建的staticMetaObject通通取到0x0,也就是在這個(gè)時(shí)間點(diǎn)它們還沒建立。
從另一方面來說,Linux版肯定是相反,所有的staticMetaObject都建立好了。
我只能猜說,QMetaObjectTable在Windows上建立的時(shí)間比Qt完全載入的時(shí)間還早。
所以要做的部份想來也只有:延遲QMetaObjectTable建立的時(shí)間點(diǎn)。
基本上就是改用指標(biāo),然後找一個(gè)可以的時(shí)機(jī)建立它,且設(shè)定好記憶體管理。
下載,內(nèi)含範(fàn)例。
原始碼呃,這包
漏了一個(gè)dll,請把其中的platforms資料夾放在和執(zhí)行檔同一個(gè)位置。
注意:因?yàn)楦挠肣t5,所以就沒辦法在XP上面跑了。
雖然說官方有提供編譯指引,但我沒時(shí)間把Qt5整個(gè)重編譯一次。
不過我想現(xiàn)在跑XP的人應(yīng)該很少了吧?好吧,我是說我希望如此。
還有,Qt5要包的東西多很多,大概肥了2.5倍吧?
要弄出基本的圖形介面後面就拖了43MB的DLL,就算壓縮後還是有17MB多。
不過這只是我在抱怨就是了,因?yàn)榫W(wǎng)路太慢,上傳只有10KB/s...
話說,Qamer中有一些全域指標(biāo),搞不好它們之中也會(huì)引發(fā)類似的問題。
回頭把它們處理掉好了,這樣或許會(huì)比較好。