Bonjour tout le monde.
Il se produit quelque chose que je trouve trop bizar avec mon application.
Parmis les nombreuses classes que comporte l'application, dont une partie sont des classes "GUI" et d'autres sont des classes derivant directement de "QObject", il y en a deux qui me causent un sérieux probleme: La classe "Ecran" et la classe "Traitement"
La classe "Ecran" est dérivée de "QLabel" avec deux methodes:
- dessiner_point(QPoint p);
- effacer_tous_les_points();
Cette classe a un attribu qui est un QVector<QPoint>
- dans la méthode "dessiner_point(QPoint p)", il y a seulement un ajout du point "p" au QVector, puis un appel a la méthode "repaint()" de la classe.
- dans la méthode "effacer_tous_les_points()", il y a un simple appel a la methode "clear()" du QVector, puis un appel a la méthode "repaint()"
- j'ai surchargé la méhode "mousePressEvent(QMouseEvent*)" de la classe "Ecran" comme suit:
quand un clique avec le bouton gauche est fait, la méthode "dessiner_point" est appelé avec comme arguments, les coordonnées du point du clique.
quand un clique avec le bouton droit est fait, la méthode "effacer_tous_les_points" est appelé
- j'ai aussi surchargé la méhode "paintEvent(QPaintEvent*)" de la classe "Ecran" de sorte que le QVector<Point> soit parcouru et que chaque point contenu soit déssiné sous forme de croix.
Lors du test de cette implémentation, a chaque clique du bouton gauche, une croix est dessinée a l'endroit du clique, a chaque clique du bouton droit, tous les points sont effacés. Tout marche comme je le voulais.
Maintenant, le probleme entre en jeu: J'ai une seconde classe "Traitement" qui parmi les choses qu'elle fait, doit dire si lors d'un clique sur l'ecran, une croix doit etre dessinée ou non (en fonction de l'etape du traitement en cours).
cette classe contien deux méthodes "clique_gauche_sur_ecran(int x, int y)" et "clique_droit_sur_ecran(int x, int y)"
j'ai modifié la méthode "mousePressEvent" de la classe ecran pour que lors d'un clique sur ecran, il ne soit plus fait appel a "dessinier_point" mais plutot a l'une des deux méthodes cités de la classe "Traitement" (en fonction du bouton préssé lors du clique).
la méthode (de la classe "Traitement") qui est appelé fais les tests necessaire pour savoir si oui ou non le point doit etre dessiné (ou alors si les points doivent etre effacés en cas d'appel de la deuxieme méthode). si la reponse est oui, alors un appel a la méthode "dessiner_point" (avec un QPoint(x,y) en argument) ou "effacer_tous_les_points" de la classe "Ecran" est fait.
C'est ici que le plantage a lieu!!!
Quand j'execute mon code, dés l'appel a la méthode "dessiner_point" ou "effacer_tous_les_points" de la classe "Ecran" par l'instance de la classe "Traitement", l'application se ferme sans raison! j'ai mis des "cout" un peu partout dans mon code pour suivre l'execution, et il s'est averé que l'instruction qui fait planté l'application est celle effectuant une opération sur le QVector!!! que ce soit un "append", un "push_back" ou un "clear", dés que l'execution arrive dessus, l'application se ferme!!
Trouvez vous normal que quand l'appel aux deux méthodes "dessiner_point" et "effacer_tous_les_points" est fait par une instance de la classe meme, tout marche bien, mais quand c'est une autre classe qui fait appel a ces méthodes, l'application se ferme dés qu'une tentative d'utilisation du QVector est faite?
Si vous avez explication à ce plantage, je vous en remerci d'avance
Partager