2011-10-08 13 views
12

Próbuję emitować standardowy ciąg z sygnałem qt. Sygnał zostanie dostarczony w kolejce. Zarejestrowałem typ za pomocą qRegisterMetaType, tak jak to opisano w dokumentacji qt, ale bez powodzenia. Ja rejestracji to jak to qRegisterMetaType<std::string>("std::string")emitować std :: string z sygnałem qt

Odpowiedz

17

Należy również zrobić:

Q_DECLARE_METATYPE (std::string) 

Cytowanie Qt Doc

Dodawanie Q_DECLARE_METATYPE() sprawia, typu znanego wszystkim szablon funkcji opartych w tym QVariant. Zauważ, że jeśli zamierzamy używać typu, w kolejce sygnałowych i szczelinowych połączeń lub w systemie własności QObject'S, masz również zadzwonić qRegisterMetaType() od nazwy są rozwiązywane przy starcie.

+0

Próbowałem, nadal nie działa. Mam również wiele sygnałów w moim projekcie, które emitują typy inne niż qt i nigdy nie robiłem Q_DECLARE_METATYPE na nich, tylko qRegisterMetaType i działają. – user152508

+1

Po prostu wykonałem szybki test i używanie zarówno qRegisterMetaType, jak i Q_DECLARE_METATYPE rzeczywiście działa. Pominięcie jednego z nich powoduje wyświetlenie komunikatu o błędzie wykonania o konieczności wywołania metody qRegisterMetaType. Domyślam się, że w przypadku innych typów, z których korzystasz, nie korzystasz z połączenia w kolejce. – Chris

+0

ok, użyłem tego przeciążenia void qRegisterMetaTypeStreamOperators (const char * typeName) może dlatego, dlaczego to nie zadziałało. Kiedy próbowałem tego overlaod int qRegisterMetaType() z kombinacją Q_DECLARE_METATYPE to działa, więc dziękuję bardzo. – user152508