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