5

構造体を使用してカスタム スロット/シグナルを作成する際に問題があります。私は次のコードを持っています:

qRegisterMetaType<namespace::myClassA::aStruct>();
QObject::connect(&myClassA, SIGNAL(theSignal(myClassA::aStruct)),
                  &myClassB, SLOT(theSlot(myClassA::aStruct)));

私が得たプログラムを実行すると:

Object::connect: No such signal NameSpace::myClassA::theSignal(myClassA::aStruct)
Object::connect:  (receiver name: 'NameSpace__CLASSNAME')

この問題を解決するにはどうすればよいですか?

PS: スロットとシグナルは、正しい引数 (aStruct) を使用して、ヘッダー ファイル ファイル Q_SIGNALS および Q_SLOTS キーワードで適切に宣言されています。

4

3 に答える 3

14

メソッド呼び出しはテキストに変換されるため、シグナル/スロット接続で使用される型は完全に「スコープ化」されている必要があります。したがって、接続呼び出しは次のようになります。

QObject::connect(&myClassA, SIGNAL(theSignal(namespace::myClassA::aStruct)),
                 &myClassB, SLOT(theSlot(namespace::myClassA::aStruct)));

おそらく、一致するようにシグナル/スロット宣言の引数を更新する必要があります。

于 2013-02-08T14:03:08.170 に答える
0

スロット/シグナルを宣言すると、次のように引数構造の名前空間をベースにすることができます。

::namespace::ClassA::structA

「名前空間」内から ClassA::structA を使用するのではなく。これは、同じ名前空間内の構造を参照しようとしている場合に役立ちます。

于 2015-11-30T22:04:33.237 に答える