我一直都是Qt程序員,現在已經有相當一段時間了,我明白了Qt的大部分特性。我仍然對連接語句在運行時如何將信號連接到插槽感到困惑。基本上我想了解編譯時會發生什麼,以及運行時會發生什麼。QT中的信號和插槽之間的連接如何?
編譯時間:元對象編譯器將生成代碼以在附加cpp文件(每個包含Q_OBJECT的類一個)中實現信號。
運行時間:信號被映射到一個插槽,插槽被執行?這是我不清楚的部分... SIGNAL和SLOTS是擴展爲信號/槽名稱的字符串表示形式的宏...在運行時這和元對象如何幫助將調用映射到槽?細節將不勝感激......
編輯: 這個鏈接會給你一個更好的主意。(僅如果你有興趣在血淋淋的細節...) http://dev.libqxt.org/libqxt/wiki/Meta_Object_Format
夫婦這與文檔QMetaObject和東西應該變得清晰...
謝謝對於答案..我可以看到生成在moc文件中的qt_metacall函數....但源對象的moc文件只包含關於信號的信息而非插槽......所以它如何找到插槽? – maxpayne 2011-03-14 12:19:27
如果我理解,我不確定。插槽和信號通過在MOC文件中生成的靜態元對象進行註冊。 MOC文件是否沒有列出您的插槽?它應該,我的。這可能會讓人困惑,因爲信號和插槽都堆積在一起。你能否給我一個更透徹的解釋,以便我能理解。 – 0xbaadf00d 2011-03-14 13:34:18