Q_Object
マクロを使用し#include <QObject>
ても同じ効果がありますか? 言い換えれば、それらは同じ目的のための2つの異なる方法ですか?
ありがとう。
いいえ。正しいヘッダーを含めることに加えQ_OBJECT
て、シグナル/スロットをオンにするクラス定義が必要です。
Q_OBJECT マクロは、シグナル、スロット、またはプロパティを実装するすべてのオブジェクトに必須であることに注意してください。また、ソース ファイルに対して Meta Object Compiler を実行する必要があります。実際にシグナル、スロット、およびプロパティを使用するかどうかに関係なく、QObject のすべてのサブクラスでこのマクロを使用することを強くお勧めします。
詳細とサンプル コードについては、Qt ドキュメントのさまざまな例を参照してください。Signals and Slotsリファレンスは、参照するのに適した場所です。オブジェクト モデルリファレンスも参照してください。
それらは2つの異なる目的に使用されます。
Q_OBJECTマクロは、独自のシグナルとスロットを宣言するか、Qtのメタオブジェクトシステムによって提供される他のサービスを使用するクラス定義のプライベートセクションに表示される必要があります。
Q_OBJECT
シグナル、スロット、その他のメタオブジェクト機能を使用する場合は、マクロが必要です。
#include<QObject>
:
これは、qobject.hヘッダーファイルをインクルードするために使用されるため、クラスで使用可能な関数を使用できQObject
ますQObject::connect()
。
そして、Q_OBJECT
マクロを使用するには、する必要があります#include <QObject>
。
いいえ。このマクロを から派生したクラスに追加しQObject
ます。しかし、マットが言うように、まだヘッダーが必要です! http://doc.qt.io/qt-5/qobject.html#Q_OBJECTを参照してください