2013-01-08 12 views
7

Mam klasę i chcę go używać w Qvariant, dlatego muszę zadeklarować i zarejestrować typ Meta. To, co zrobiłem:Zarejestruj Meta Type w Qt

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

Ale ten kod daje mi błąd:

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 

Chyba trzeba zarejestrować Met-typ, ale nie jestem pewien, gdzie mają qRegisterMetaType<MyClass>("MyClass"); . Próbowałem go po makrze deklaracji typu meta, ale spowodował błąd. Zgłaszaj wszelkie komentarze lub wskazówki, które kierują mnie na właściwą ścieżkę.

+0

Wierzę, że rejestruję metatypesy w pliku źródłowym C++ dla klasy, którą rejestruję. I tak jak cmannett85 powiedziałem, że używam wskaźników do klas, a nie obiektów. – drescherjm

Odpowiedz

19

Obiekty są kopiowane po wstawieniu do klas pochodnych QVariant, ale QObject nie można skopiować, więc rozwiązaniem jest użycie wskaźnika do klasy.

Q_DECLARE_METATYPE(blabla*) 

także qRegisterMetaType<T>() jest wymagane jedynie do wysyłania swój przedmiot przez kolejce połączeń sygnał/szczelinowe.

+1

Zastrzeżenie: w rzeczywistości jest to Q_DECLARE_METATYPE (blabla *) –

+0

@MatthiasKuhn Woops, tak, masz rację. – cmannett85

+0

Np. Musiałem wpaść na to po tym, jak bardzo się cieszę, że znalazłem twoją odpowiedź. –