2011-10-08 17 views
12

Sto tentando di emettere una stringa standard con il segnale qt. Il segnale verrà consegnato come in coda. Ho registrato il tipo con qRegisterMetaType, come si dice nella documentazione qt, ma senza fortuna. Sto registrando in questo modo qRegisterMetaType<std::string>("std::string")emit std :: string con il segnale qt

risposta

17

Si dovrebbe anche fare:

Q_DECLARE_METATYPE (std::string) 

Citando Qt Doc

Aggiunta di una Q_DECLARE_METATYPE() rende tipo noto a tutte le funzioni base di template , incluso QVariant. Si noti che se si intende utilizzare tipo in segnali e slot connessioni in coda o nel sistema di proprietà di QObject, si hanno anche per chiamare qRegisterMetaType() dal momento che i nomi vengono risolti in fase di esecuzione.

+0

Ho provato, ancora non funziona. Inoltre ho molti segnali nel mio progetto che stanno emettendo tipi non qt, e mai Q_DECLARE_METATYPE su di essi, solo qRegisterMetaType, e stanno funzionando. – user152508

+1

Ho appena eseguito un test rapido e l'utilizzo di qRegisterMetaType insieme a Q_DECLARE_METATYPE funziona davvero. Lasciando fuori uno dei due risultati in un messaggio di errore in fase di esecuzione circa la necessità di chiamare qRegisterMetaType. La mia ipotesi è che per gli altri tipi che stai usando non stai usando una connessione in coda. – Chris

+0

ok, stavo usando questo sovraccarico void qRegisterMetaTypeStreamOperators (const char * typeName) forse perché non ha funzionato. Quando ho provato questo overlaod int qRegisterMetaType() con la combinazione di Q_DECLARE_METATYPE funziona, quindi Grazie mille. – user152508

Problemi correlati