2011-10-08 2 views
12

J'essaie d'émettre une chaîne standard avec un signal qt. Le signal sera délivré en file d'attente. J'ai enregistré le type avec qRegisterMetaType, comme il est dit dans la documentation qt, mais pas de chance. Je suis inscris comme ça qRegisterMetaType<std::string>("std::string")emit std :: string avec le signal qt

Répondre

17

Vous devez également faire:

Q_DECLARE_METATYPE (std::string) 

Citant Qt Doc

Ajout d'un Q_DECLARE_METATYPE() rend le type connu à toutes les fonctions basées sur un modèle , y compris QVariant. Notez que si vous l'intention d'utiliser le type dans le signal et les connexions en file d'attente sous ou système de propriété QObject, vous devez également appeler qRegisterMetaType() puisque les noms sont résolus lors de l'exécution.

+0

J'ai essayé, ne fonctionne toujours pas. De plus, j'ai de nombreux signaux dans mon projet qui émettent des types non qt, et jamais Q_DECLARE_METATYPE sur eux, seulement qRegisterMetaType, et ils fonctionnent. – user152508

+1

Je viens de faire un test rapide, et en utilisant à la fois le qRegisterMetaType avec Q_DECLARE_METATYPE fonctionne en effet. L'omission de l'un des deux entraîne un message d'erreur d'exécution au sujet de l'appel de qRegisterMetaType. Je suppose que pour les autres types que vous utilisez, vous n'utilisez pas une connexion en file d'attente. – Chris

+0

ok, j'utilisais cette surcharge qRegisterMetaTypeStreamOperators (const char * typeName) peut-être que cela n'a pas fonctionné. Quand on a essayé this overlaod int qRegisterMetaType() avec la combinaison de Q_DECLARE_METATYPE cela fonctionne, donc merci beaucoup. – user152508