Bonjour,
Je maitrise les signaux et slots quand il faut transmettre des types basiques.
Mais j'ai du mal à comprendre les règles à suivre pour transmettre des objets via signaux.
J'ai deux classes C1 et C2, héritant de QObject, connectées entre elles via signal-slot, et situées dans des threads différents.
A un moment C1 crée un instance d'une classe A et doit l'envoyer à C2.
Dans un premier temps, admettons que A n'hérite de rien.
Quelle est la règle pour transmettre correctement A ?
Par valeur, par adresse, par référence ou par référence constante ?
J'ai lu que les pointeurs étaient déconseillés entre threads, car rien ne garanti que le pointeur n'est pas été détruit dans l'un ou l'autre thread.
Par valeur j'ai parfois des messages d'erreurs 'vtable' (je ne suis pas certain que cela venait de là).
J'ai aussi lu qu'il fallait parfois utiliser qRegisterMetaType() mais je n'ai pas compris réellement quand, à part quand ça génère une erreur bien spécifique et que pour l'implémenter il fallait un constructeur par défaut, un constructeur de copie, et destructeur.
Et si A hérite de QObject ?
L'idée serait que C1, qui utilise des A, émette un signal transmettant ces A à chaque création pour que l'extérieur puisse s'y connecter s'il le souhaite.
Est-ce que les règles changent si C1 et C2 sont dans le même thread ?
J'ai envie de bien faire mais je suis dans le flou...
Merci d'avance pour vos conseils.
Partager