4

Q_Objectマクロを使用し#include <QObject>ても同じ効果がありますか? 言い換えれば、それらは同じ目的のための2つの異なる方法ですか?

ありがとう。

4

3 に答える 3

11

いいえ。正しいヘッダーを含めることに加えQ_OBJECTて、シグナル/スロットをオンにするクラス定義が必要です。

QObjectAPIドキュメントから:

Q_OBJECT マクロは、シグナル、スロット、またはプロパティを実装するすべてのオブジェクトに必須であることに注意してください。また、ソース ファイルに対して Meta Object Compiler を実行する必要があります。実際にシグナル、スロット、およびプロパティを使用するかどうかに関係なく、QObject のすべてのサブクラスでこのマクロを使用することを強くお勧めします。

詳細とサンプル コードについては、Qt ドキュメントのさまざまな例を参照してください。Signals and Slotsリファレンスは、参照するのに適した場所です。オブジェクト モデルリファレンスも参照してください。

于 2011-04-14T09:52:19.293 に答える
3

それらは2つの異なる目的に使用されます。

Q_OBJECT

Q_OBJECTマクロは、独自のシグナルとスロットを宣言するか、Qtのメタオブジェクトシステムによって提供される他のサービスを使用するクラス定義のプライベートセクションに表示される必要があります。

Q_OBJECTシグナル、スロット、その他のメタオブジェクト機能を使用する場合は、マクロが必要です。

#include<QObject>

これは、qobject.hヘッダーファイルをインクルードするために使用されるため、クラスで使用可能な関数を使用できQObjectますQObject::connect()

そして、Q_OBJECTマクロを使用するには、する必要があります#include <QObject>

于 2011-04-14T09:59:09.563 に答える
0

いいえ。このマクロを から派生したクラスに追加しQObjectます。しかし、マットが言うように、まだヘッダーが必要です! http://doc.qt.io/qt-5/qobject.html#Q_OBJECTを参照してください

于 2011-04-14T09:54:32.790 に答える