Problème Qt
Forum Programmation : Problème Qt
Bonjour tout le monde, est-ce que vous pourriez m'aider s'il vous plaît, je rencontre une petite difficulté dans un programme en Qt. Voici le code et je vous donne le problème ensuite (j'ai marqué les lgnes qui me semblent importantes pour régler le problème) :
Main.cpp
Code :
|
MaFenetre.h :
Code :
|
MaFenetre.cpp :
Code :
|
En fait je voudrais que quand je clique sur le bouton marqué 1 ça change la valeur d'affichage sur le QLCDNumber mais ça marche pas ><. J'ai déjà cherché mais j'ai pas réussi avec ce que j'ai trouvé, donc je m'en remets à vous.
Merci d'avance pour votre aide !
Code :
|
Quand tu appuies sur le bouton tu affiches 48.
Tu veux la changer mais qu'est-ce que tu veux faire exactement?
Si c'est pour ajouter +1 à chaque clic, tu utilise une variable membre dans MyWidget que tu incrémentes et affiche à chaque clic: m_lcd->display( ++taVariable )
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
En fait tout ce que je veux pour l'instant c'est que le QLCDNumber affiche le 48 quand je clique sur le bouton (il est à 0 quand je lance le programme), ce qui n'est pas le cas et c'est ça que je ne comprends pas, je sais pas quoi changer pour que ça marche
Merci d'avoir répondu
Message édité par zoizoboules le 13-06-2008 à 21:49:12
Ah ok, c'est surment juste un problème de rafraichissement de l'affichage, essaie d'appeler un update:
Code :
|
J'en ai trop mis mais c'est pour tester. Si ça ne marche pas essaie avec repaint(), et si ça ne marche toujours pas, c'est que ce n'est pas un problème de rafraichissement
Sinon,
Code :
|
c'est quoi ça ?
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Alors pour la ligne avec le m_lcd -> (12); c'est une bêtise que j'ai marquée parce que je testais tout et n'importe quoi quand j'ai vu que ce que j'avais fait ne marchait pas mais maintenant je l'ai enlevé, et j'ai essayé de faire update comme vous aviez proposé mais ça n'a pas marché non plus (pas plus que repaint...), donc ça ne doit pas être un problème de rafraîchissement
...
Voilà un des trucs que j'avais trouvés en cherchant, c'est le même problème que le mien, est-ce que ça pourrait vous aider à m'aider ?
http://www.siteduzero.com/forum-83 [...] umber.html
Message édité par zoizoboules le 13-06-2008 à 23:37:43
non l'autre problème c'est l'erreur de mettre une valeur fixe en paramètre du slot du connect. Normalement, un slot puet être appelée comme une méthode normale.
J'ai un peu mieux regardé le code, et il y a un truc vraiment bizarre:
Dans MaFenetre, tu n'utilises jamais pas MyWidget.
Et dans ton connect, tu connectes le signal clicked du bouton de type QPushButton (ça OK) au slot buttonClicked de m_lcd de type QLCDNumber qui n'a évidemment pas de slot buttonClicked.
m_lcd doit être une instance de la classe MyWidget et pas de la classe QLCDNumber.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Oui mais je crois que l'autre personne cherchait à faire la même chose que moi, c'est pour ça que je vous ai montré ça.
Je suis désolé si je suis un boulet mais je suis pas sûr d'avoir très bien compris ce que vous vouliez dire.
Message édité par zoizoboules le 14-06-2008 à 14:25:15
Code :
|
Tu as fait un héritage.
MyWidget est un nouveau widget qui contient tout ce que contient tout QLCDNumber. Donc ton MyWidget est ton widget QLCDNumber personalisé.
Donc, à l'intérieur de MyWidget, ne déclare pas "QLCDNumber *m_lcd;" car c'est maintenant MyWidget l'afficheur LCD.
Dans ce que tu as fait, MyWidget est en fait un QLCDWidget auquel tu as ajouté le slot buttonClicked().
Maintenant dans MaFenetre, si tu n'utilises que des QLCDWidget, tu n'utilises pas ton afficheur LCD perso mais celui par défaut, donc tu n'as pas le slot buttonClicked().
C'est pour ça que dans MaFenetre, tu ne doit utiliser que des MyWidget pour n'utiliser que les afficheurs LCD perso (et donc utiliser le nouveau slot).
Donc, dans la déclaration de MaFenetre, remplace QLCDNumber *m_lcd; par MyWidget *m_lcd;
Et, dans l'implémentation du constructeur de MaFenetre, remplace m_lcd = new QLCDNumber (1, this); par m_lcd = new MyWidget (1, this);
Il te faudra donc dans MyWidget faire le constructeur qui va bien pour les 2 paramètres que tu passes.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Voilà ce que j'ai changé dans MaFenetre.h
Code :
|
La seule chose que j'aie changée dans MaFenetre.cpp c'est ça :
Code :
|
je n'ai rien fait d'autre.
Ceci dit ça marche toujours pas, donc je suppose que j'ai oublié quelque chose dans la classe MyWidget, mais je trouve pas quoi, est-ce que vous voyez ce que c'est ? Je vais peut être abandonner parce que si je trouve pas c'est qu'il y a un truc que j'ai pas du lire ou comprendre dans le cours.
Dans la déclaration de la classe, il te faut ajouter les 2 paramètres au constructeur, pour coller au constructeur QLCDNumber (http://doc.trolltech.com/3.2/qlcdn [...] CDNumber-2)
Code :
|
et dans l'implémentation du constructeur:
Code :
|
et enlève le MyWidget *m_lcd; de MyWidget !
Je vois que tu ne sais pas programmer en orienté objet. Les classe sont comme si tu définissais un type. Tu définis le type MyWidget qui hérite de QLCDNumber, c'est-à-dire que le type MyWidget est le type QLCDNumber personnalisé.
à partir de la classe MyWidget, tu peux créer plein d'objets de type MyWidget (la classe n'est pas un objet, mais juste la description type des objets).
Dans ta classe MaFenetre, tu indiques que tous les objets de type MaFenetre possèderont des sous objets (c'est ce que tu déclares dans la classe). Donc, tous les objets de type MaFenetre possèderont chacun un objet de type MyWidget.
Dans le main(), tu crées un seul objet: fenetre de type MaFenetre.
Donc, au final, tu crées un objet fenetre de type MaFenetre (personnalisation d'un QWidget) qui continent, entre autres, un autre objet de type MyWidget (personnalisation d'un QLCDNumber).
Ps: la déclaration de MyWidget:
Code :
|
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Vous avez raison, je ne sais pas programmer en orienté objet, ou peu, j'ai fait beaucoup de C mais très peu de C++, et en plus j'ai zappé une partie de cours sur les classes sans m'en rendre compte (je me suis arrêté en plein milieu et quand j'ai repris c'était pas le bon endroit) donc je crois qu'il faut que je reprenne tout ça, ceci dit maintenant j'ai compris pourquoi ça ne marchait pas. Merci beaucoup de m'avoir aidé (et d'avoir été patient jusqu'au bout ^^').
Merci encore, bonne soirée !
Message édité par zoizoboules le 14-06-2008 à 21:37:11
Il y a 2230 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
