2009-09-02 21 views

答えて

5

私たちは多少あなたの他の質問

Why does Qt use its own make tool, qmake?

でそれに答えしかし、もう少し詳細に行くために、MOCは、シグナル/スロットの宣言(だけでなく、プロパティ、およびその他のサポート構造を探して、あなたのファイルを解析します)、それらに基づいて中間コードファイルを生成する。これらの中間コードファイルは、ライブラリーがオブジェクトとの通信に使用するシグナルとスロットへの強力な型付きのアクセスを提供します。

qmakeは、これらの中間ファイル(および生成されたUIファイルやリソースファイル)と独自のコードを自動的に組み込んだメイクファイルを生成するので、選択したツールチェーンでビルドすることができます。

10

ように、このトピックのために利用できる非常に良いのQt documetnationがあります。あなたが何が起こっているのかを知りたければ、この情報はあなたを助けるかもしれません:

スロットはちょうど普通の方法です。特別なことはありませんが、EXCEPT mocはその署名を中間.mocファイルのテーブルに保存します。このファイルを調べると、このテーブルがはっきりと分かります。

このテーブルでは、そのシグネチャを使用してメソッドを呼び出すことができます。 SLOT(mySlot(int))マクロは、問題のメソッドの文字列表現になっています。これを行うにはいくつかの方法があります。たとえば、QMetaObjectのドキュメントを参照してください。

信号をスロットに接続すると、信号とスロットのシグネチャは後で使用するために保存されます。信号が放射されると、その信号に以前に接続されていたすべてのスロットが上記の方法で呼び出されます。

もっと知りたいのであれば、moc生成コードを調べて、シグナル放出とconnect()呼び出しの内部を踏み出すことをお勧めします。ここには魔法はありませんが、多くの巧みさがあります。

+1

多くを知っているが、ない魔法! http://catb.org/esr/jargon/html/magic-story.html – jrharshath

+0

を思い起こさせます。そこには2種類の接続があります。最初の1つ:シグナルが送出された時点でスロットが呼び出されます。そして第2のもの:スロットコールはイベントループキューに置かれます。接続では手動でメソッドを選択できますが、異なるスレッドからの信号とスロットの接続は常にキューに入れられます。 – JustAnotherCurious

関連する問題