2013-01-08 17 views
7

Ho una classe e voglio usarla in un Qvariant, quindi ho bisogno di dichiarare e registrare il tipo Meta. Questo è quello che ho fatto:Registrare un tipo meta in Qt

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

Ma questo codice mi sta dando errore:

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 

Credo che ho bisogno di registrare il mio met-tipo, ma non sono sicuro dove andare a qRegisterMetaType<MyClass>("MyClass"); . Ho provato ad averlo dopo la macro di dichiarazione del tipo meta, ma ha provocato un errore. Apprezzi qualsiasi commento o suggerimento che mi indirizza sulla giusta direzione.

+0

Credo di registrare i miei metatipi nel file sorgente C++ che per la classe che sto registrando. E come diceva cmannett85, io uso i puntatori alle classi e non agli oggetti. – drescherjm

risposta

19

Gli oggetti vengono copiati quando inseriti in un QVariant, ma le classi derivate QObject non possono essere copiate, quindi la soluzione è utilizzare un puntatore alla classe.

Q_DECLARE_METATYPE(blabla*) 

anche qRegisterMetaType<T>() sono richiesti solo per inviare il vostro oggetto attraverso le connessioni del segnale/di slot in coda.

+1

Avviso: in realtà Q_DECLARE_METATYPE (blabla *) –

+0

@MatthiasKuhn Woops, sì hai ragione. – cmannett85

+0

Np. Ho dovuto imbattermi in questo dopo essere stato molto contento di aver trovato la tua risposta. –

Problemi correlati