qt信號槽實現(xiàn)原理?
Qt-信號槽的實現(xiàn)原理
信號和槽是在Qt的元對象系統(tǒng),它有一個元對象編譯器。在編譯程序之前,會有一個預(yù)處理過程,將類/對象中的信號和槽串值保存在一個容器中,這個容器可以是字符串,也可以是其他有序的容器。
qt和qtcreator有什么區(qū)別?都是做什么用的?
向下到編譯和鏈接層,沒有區(qū)別。它們都是根據(jù)參數(shù)設(shè)置和附加參數(shù)調(diào)用相應(yīng)的編譯器和連接器,最終完成整個程序的構(gòu)造。區(qū)別在于兩個方面:(1)參數(shù)分析的過程;(2)依賴關(guān)系的維護(hù)和更新,也就是所謂的工程組織形式(工程文檔)。
經(jīng)過多次修改,VC現(xiàn)在使用vcxproj文件來組織項目。在VS中按F5后,過程大概是這樣的。我們用msbuild分析vcxproj,獲取構(gòu)建參數(shù),求解依賴關(guān)系,啟動編譯器對源文件進(jìn)行編譯,最后調(diào)用鏈接器鏈接輸出。當(dāng)然中間還有很多其他過程,所以我贏了這里不贅述。
QtCreator比較特別。一般來說,它使用pro和pri文件來組織項目,但它沒有內(nèi)置的構(gòu)建工具。而是通過Qt工具鏈中的qmake工具解析pro和pri文件,生成其他構(gòu)建系統(tǒng)可以識別的組織文件,包括make和nmake,然后調(diào)用相應(yīng)的構(gòu)建工具完成構(gòu)建。至于這些建筑系統(tǒng)是如何工作的,去查相關(guān)資料和文件就可以了。
再多說兩句,在構(gòu)建Qt程序的時候,可能還需要幾個額外的過程。一個是moc生成對象元數(shù)據(jù),一個是uic把ui接口轉(zhuǎn)換成C代碼,一個是rcc把Qt資源定義文件qrc轉(zhuǎn)換成數(shù)據(jù)代碼。默認(rèn)情況下,VS不會為您添加和維護(hù)這些進(jìn)程,所以VSsQt插件就派上用場了,可以自動幫你設(shè)置這些流程。還有,當(dāng)VS構(gòu)建Qt項目時,插件不會參與其中。也就是說,在安裝了Qt插件的VS中組織的項目,在沒有插件的VS中也可以成功構(gòu)建。
當(dāng)然,如果你所有的依賴關(guān)系都在pro文件中描述清楚了,那么用qmake生成vcxproj,然后啟動vs來構(gòu)建項目是完全可以接受的。
最后,Qt4的VS插件不再更新,VS的AddinAPI也面臨退役的風(fēng)險。在這里,我還是安利下我的fork的Qt4插件,修復(fù)了一些bug,增加了幾個新功能,包括配置對話框彈性,x86和x64平臺使用不同Qt版本,不同VS使用不同Qt版本,支持2012和2013,最近打算在2015年增加支持。
地址是:JackyDing/Qt4VSA。ddinGitHub