2009-09-02 72 views

回答

5

我們有些回答了你的其他問題

Why does Qt use its own make tool, qmake?

但進入稍微更詳細,商務部解析您的文件尋找信號/槽聲明(以及屬性和其他支持結構)並基於這些生成中間代碼文件。這些中間代碼文件提供對信號和插槽的強類型訪問,以便庫用於與對象進行通信。

qmake生成一個自動包含這些中間文件(以及生成的任何UI或資源文件)以及自己的代碼的makefile,以便您可以使用您選擇的工具鏈進行構建。

10

正如其他人說,有供這個話題很好的Qt documetnation。如果你想知道引擎蓋下發生了什麼,這個信息可能會幫助你:

插槽只是常規的方法。除此之外沒有什麼特別的,除了moc會將它們的簽名保存在中間.moc文件的表格中 - 當你瀏覽這個文件時,你可以很清楚地看到這個表格。

此表格允許您使用它的簽名來調用方法。宏可以歸結爲所討論的方法的字符串表示。有幾種方法可以執行此操作,例如,請參閱QMetaObject的文檔。

當您將信號連接到插槽時,會將信號和插槽簽名存儲起來供以後使用。當發出信號時,先前連接到該信號的所有時隙都使用上述方法調用。

如果您想了解更多信息,建議您查看moc生成的代碼,並逐步查看信號發射和connect()調用的內部信息。這裏沒有魔法,但有很多聰明之處。

+1

很多的小聰明,但沒有魔法!讓我想起http://catb.org/esr/jargon/html/magic-story.html – jrharshath 2009-09-24 14:24:50

+0

那裏有兩種類型的連接。第一個:在發射信號時調用插槽。第二個:插槽調用放置在事件循環隊列中。您可以在連接中手動選擇方法,但連接來自不同線程的信號和插槽始終排隊。 – JustAnotherCurious 2013-04-30 11:01:04