EmitとEmit()の違い
-
21-12-2019 - |
質問
Qtでは、どちらも有効で、同じ意味があります。
emit someSignal(value);
.
vs
emit(someSignal(value));
.
差はありますか?
解決
差はありますか?
外部ブラケット以外の違いはありませんので、プログラマはそれを好み、QTプロジェクトでも慣例的に使用されています。
差のない理由はこれによるものです。
# define emit
.
この
そのため、基本的に「空」文字列とプリプロセッサに宣言されているだけで、バリアントを次のように置き換えます。
someSignal(value);
.
または
(someSignal(value));
.
クイックテストのために、プリプロセッサが実行された後にコンパイラの実行を停止すると、この自己が表示されます。 GCCの場合の-E
オプション
詳細情報:コメントの中の誰かは、グローバルマクロネームスペースを汚染するため、Emitキーワードについて疑問を投げました。それは本当ですが、良いことであることをする一般的な方法があることを確実にするのは良い方法です。
これは必須ではないので、誰でも無効化、未定義、またはそれをオフにすることも
.
CONFIG += no_keywords
この方法は、それがまだQ_SIGNAL
、Q_SIGNALS
、Q_SLOT
、Q_SLOTS
、Q_EMIT
、すべてそれにQtのシグナルスロットメカニズムを使用することが可能であってもよい。
ここでは、対応するドキュメントについて、Q_EMIT
について見つけることができます。例えば:
q_emit
このマクロを使用して、QT信号とスロットをサードパーティの信号/スロットメカニズムで使用したい場合は、エミッションキーワードを交換します。
.proファイルのconfig変数でno_keywordsが指定されている場合、マクロは通常使用されますが、NO_KEYWORDSが指定されていない場合でも使用できます。
他のヒント
違いはありません。実際、emit
は空のマクロとして定義されているので、ただ
someSignal(value);
.
も同等です。emit
は、QT信号をトリガーしていることをより明白にします。
違いはありません。それは空のプリプロセッサ定義であり、コンパイラがコードを見る前に削除されます。コンパイラに関する限り、それは存在しません。
プログラマーの利益のために純粋に存在し、その時点で信号が処理される可能性があり、コードのデバッグに役立つかもしれないことを彼/彼女に知ってください。