2017-05-09 1 views
-2

désolé, je ne peux pas être plus précis, parce que je suis coincé dans un fouillis de classes, et plusieurs signaux/slots.Fentes de signal Qt C++ - nécessaires pour effacer les signaux?

Dans mon projet, j'utilise plusieurs slots de signal. Maintenant, j'ai l'impression que selon la fréquence à laquelle je lance une routine qui émet un signal, mon slot est lancé plusieurs fois.

Pour le premier rhum, mon slot est lancé une fois; Dans la deuxième exécution, il est exécuté deux fois ... Lorsque je ferme mon programme, je recommence à l'exécuter une fois.

Existe-t-il un besoin de terminer/terminer/supprimer un signal après son envoi?

Merci

Répondre

3

Regardez le drapeau Qt::UniqueConnection.

+0

Merci! C'était ça! J'ai un slot privé on_pusbButton_cklicked(). En cela j'ai eu des sonneries-signal. Quand j'ai appuyé sur le bouton la deuxième fois j'avais 2 connexions chacun :-) – user3443063

0

Un signal reste connecté, jusqu'à ce que le disconnect() est utilisé, ou l'expéditeur ou le destinataire est supprimé. Ainsi, chaque paire signal/slot ne doit être connectée qu'une seule fois, puis chaque fois que le signal est émis, le slot est appelé.

1

Vous connectez des signaux aux emplacements en réaction à des événements. Cela provoque des connexions en double lorsque les événements sont répétés. Dans la plupart des cas, c'est un bug. Habituellement, vous voulez configurer des connexions dans les constructeurs de classe, ou autrement lorsque de nouveaux objets sont créés et ajoutés à votre système.

La connexion unique masquera le problème, mais ne le résoudra pas - la solution consiste à déplacer les instructions connect vers des emplacements où elles ne seront pas réexécutées.