4

プログラムでシグナルとスロットを使用したいので、Ineed に以下のように Q_OBJECT を追加するように指示されました。

さて、私はクラスを持っています:

class A
{
    Q_OBJECT
public:
    A();
};

これにより、「Q_OBJECT はタイプに名前を付けていません」というエラーが発生します。#include を追加すると、「A の vtable への未定義の参照」というエラーが表示されます

それで、これを行う正しい方法は何ですか?

4

1 に答える 1

6

Q_OBJECTマクロは、a (または他のサブクラス) のサブクラス用ですQObject。クラスでシグナルとスロットを使用する場合にも必要です。

class A 
    : public QObject
{
    Q_OBJECT

 public:
    A(QObject *parent = 0);
};

Q_OBJECT

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

于 2012-11-24T17:24:55.243 に答える