Bonjour,
Pour commencer un QTimer ne s'utilise pas de la sorte de façon bloquante avec une boucle while (qui ici va le faire stopper/re-démarrer sans cesse) : on fixe un certain délai, connecte un slot à exécuter à chaque "timeout", et démarre le timer. Celui-ci se chargera alors tout seul d'émettre à chaque intervalle fixé son signal timeout() qui entrainera l'exécution du slot.
Remplace donc ta boucle while par un simple timer1->start(3000);. Et lorsque ton d_nbr arrivera à 0, stop() ton timer dans la méthode enlever1fois() (passe-le en membre de la classe pour pouvoir ce faire).
Et n'oublie pas de le libérer, ou de profiter du mécanisme de Qt pour cela
Ensuite, le passage de la variable w. Il n'est pas possible de faire passer de la sorte des arguments sur la ligne du connect. On ne fait que spécifier les types des différents paramètres des signaux/slots. Et le signal timeout() n'en ayant ici aucun, le slot se doit aussi de n'en avoir aucun (nombre inférieur ou égal de paramètres).
Si tu utilises Qt5 et C++11, tu peux utiliser une lambda :
connect(timer1, &QTimer::timeout, [w,this]() { enlever1fois(w); } );
Afin de pouvoir utiliser les signaux/slots dans une classe, celle-ci doit hériter de QObject, et avoir la macro Q_OBJECT (cf. FAQ), ce qui n'est pas le cas de ta classe
noeuxpapillon (QGraphicsPixmapItem n'hérite pas de QObject).
Partager