2013-01-08 14 views
7

クラスがあり、Qvariantで使用したいので、メタタイプを宣言して登録する必要があります。Qtにメタタイプを登録する

class blabla: public QThread 
{ 
    Q_OBJECT 
. 
. 
. 
}; 
Q_DECLARE_METATYPE(blabla) 

をしかし、このコードは私にエラーを与えている:これは私がやったことです

In copy constructor ‘QThread::QThread(const QThread&)’: 
instantiated from ‘void* qMetaTypeConstructHelper(const T*) [with T = blabla]’ 
instantiated from ‘int qRegisterMetaType(const char*, T*) [with T = blabla]’ 
instantiated from here 
‘QObject::QObject(const QObject&)’ is private 
within this context 
In file included from UnitTest.cpp:16:0: 
blabla.h: In copy constructor ‘blabla::blabla(const blabla&)’: 
note: synthesized method ‘QThread::QThread(const QThread&)’ first required here 
In file included from /usr/include/QtCore/qvariant.h:48:0, 
      from /usr/include/QtCore/qabstractitemmodel.h:45, 
      from /usr/include/QtCore/QtCore:7, 
      from /usr/include/QtTest/QtTest:3, 
      from UnitTest.h:16, 
      from UnitTest.cpp:14: 
In function ‘void* qMetaTypeConstructHelper(const T*) [with T = blabla]’: 
note: synthesized method ‘blabla::blabla(const blabla&)’ first required here 
make[1]: *** [build/obj/UnitTest.o] Error 1 

私は会った型を登録する必要が推測するが、私は持っている場所を確認していないqRegisterMetaType<MyClass>("MyClass"); 。私は、メタ型宣言マクロの後にそれを試してみましたが、エラーが発生しました。私を正しい道に導くコメントやヒントを付ける。

+0

私は自分のメタタイプをC++ソースファイルに登録すると思います。 cmannett85のように私はオブジェクトではなくクラスへのポインタを使用しています。 – drescherjm

答えて

19

QVariantに入れるとオブジェクトがコピーされますが、QObjectの派生クラスはコピーできません。解決策はクラスへのポインタを使用することです。

Q_DECLARE_METATYPE(blabla*) 

qRegisterMetaType<T>()は、キューに入れられた信号/スロット接続を通じてオブジェクトを送信する場合にのみ必要です。

+1

注意:それは実際にQ_DECLARE_METATYPE(blabla *)です。 –

+0

@MatthiasKuhn Woops、はい、あなたは正しいです。 – cmannett85

+0

Np。私はあなたの答えを見つけたことを非常に嬉しく思って、これにぶち込まなければなりませんでした。 –

関連する問題