QT4 Comment afficher un objet QPainter dans une fenetre principale?? - C++ - Programmation
Marsh Posté le 21-02-2008 à 23:32:37
Salut,
Un QPainter n'est pas un widget mais un objet permettant de réaliser des opérations graphiques *sur* un QPaintDevice (QWidget en est un, un peu particulier).
Qu'est ce que tu veux faire exactement ??
Marsh Posté le 22-02-2008 à 00:02:50
En fait je crée un histogramme à partir de statistique(avec des drawLine()) et cet histogramme je le trace dans un QPainter. Et je souhaite pouvoir intégrer cet histogramme dans ma fenêtre principale.
Marsh Posté le 22-02-2008 à 01:44:06
Quand tu dessines avec QPainter, il faut associé ce QPainter à un QPaintDevice. Tu as fait les tutos que je t'ai indiqué? A partir du tuto 8, c'est expliqué comment dessiné (dans un widget, dans ton cas, un QPixmap pourrait être plus indiqué).
Marsh Posté le 22-02-2008 à 14:48:02
J'ai fait les tutoriel que tu m'as indiqué mais je n'ai pas forcément tout tout compru
Par contre j'ai compris qu'il fallait que je créé une classe qui hérite de QDialog et que dans cette classe il fallait que je crée une fonction paintEvent qui sera appelé quand je créerais un objet du type de la classe créé.
Sa m'ouvre bien une fenêtre lorsque je crée l'objet dans ma classe principale mais j'ai l'impression qu'en suite ça boucle à l'infini dans la fenêtre(puisque mon utilisation CPU monte au maximum et le programme plante).
Je me demande si je fait bien d'utiliser QPainter et si je ne devrais pas plutôt utiliser QGraphicsLineEdit. Et je me demande aussi ce qui ce passe dans ce que j'ai fait pour que ça plante comme sa.
voici histogramme.h :
Code :
|
et histogramme.cpp :
Code :
|
Une session est une classe regroupant un tableau de match et un tableau d'équipe.
Pour chaque équipe j'ai un certain nombre de joueurs.
Et dans match j'ai une ou deux équipe.
Encore merci pour le temps que tu passe à m'expliquer.
Marsh Posté le 22-02-2008 à 14:52:33
QPainter et QGraphics n'ont pas la même finalité. Utiliser un QPainter, c'est bien, mais effectivement avec le code ce sera mieux (entre balise [cpp ][ /cpp] sans les espaces)
Edit: ok; première chose paintEvent est protégée, pas public.
Marsh Posté le 22-02-2008 à 14:59:06
IrmatDen a écrit : QPainter et QGraphics n'ont pas la même finalité. Utiliser un QPainter, c'est bien, mais effectivement avec le code ce sera mieux (entre balise [cpp ][ /cpp] sans les espaces) |
Oups je pense que là ça devient un peu l'overdose de QT^^. Merci
Marsh Posté le 22-02-2008 à 15:24:40
En fait ça change pas grand chose d'y mettre en protected j'ai toujours le même problème..
Marsh Posté le 22-02-2008 à 15:27:59
fardke1 a écrit :
|
Marsh Posté le 22-02-2008 à 15:34:06
fardke1 a écrit : En fait ça change pas grand chose d'y mettre en protected j'ai toujours le même problème.. |
Oui, je m'en doute, mais je n'avais pas lu en détail et j'étais reparti dans mon taf
Indice t'as une boucle foireuse, précisément celle-ci:
Code :
|
Relis la plusieurs fois s'il le faut, mais c'est une erreur vraiment bête Penses à l'indiçage de tableau...
Marsh Posté le 22-02-2008 à 15:47:49
Oups désolé de déranger pour si peut
La mon problème c'est que la fenêtre s'affiche et repart trop vite j'ai rien le temp de voir.
Alors pour ça aussi j'ai trouvé une réponse dans la documentation de Qt du genre :
QTimer::singleShot(1000,this,SLOT(foo()));
mais en fait sa marche pas beaucoup!!!!
Alors est ce que je n'utiliserais pas le bon slot???
Merci (encore une fois) et excuse moi de t'avoir embêté pour l 'erreur précédente!!!
Marsh Posté le 22-02-2008 à 15:52:19
fardke1 a écrit : La mon problème c'est que la fenêtre s'affiche et repart trop vite j'ai rien le temp de voir. |
Tu ne la créerais pas comme variable locale et sur la heap dans une autre fonction (et non dans la classe) par hasard ?
Marsh Posté le 22-02-2008 à 16:01:42
Citation : Tu ne la créerais pas comme variable locale et sur la heap dans une autre fonction (et non dans la classe) par hasard ? |
En fait je l'appelle dans ma fenêtre principale dans un slot mais le problème c'était surtout que je faisait mon_histo.show() au lieu de faire mon_histo.exec()
Et du coup on se rend bien compte maintenant que rien ne ce trace
En gros ça ouvre une fenêtre mais il n'y a pas de fond (que j'avais demander noir et il n'y a aucune courbe de tracée.
Je n'ai pas changer l'échelle mais normalement je devrais quand même voir quelque chose ou au moins le fond noir..
Là y a rien juste un beau fond gris...
Marsh Posté le 22-02-2008 à 16:07:02
En fait je t'ai dit une bêtise... là ça n'afficher rien mais c'est parce que j'avais mis la partie du dessus de remplissage du tableau x en commentaire donc normal que ça n'affiche rien...
Par contre maintenant que je re-remplis le tableau je retourne dans une boucle infinie....
Marsh Posté le 22-02-2008 à 16:10:50
C'est bon SA MARCHEEEEEEEEEEEEEEE!!!!
Je te remercie
T'imagine pas comme sa me fait plaisir de voir ce trait^^
Bon il me reste quelque petit problème je te dirais si je me débloque pas mais pour le moment je vois le graphique!!!
Marsh Posté le 22-02-2008 à 16:26:42
D'ailleurs c'est un peu en dehors du post mais est-ce que tu connais un tutoriel qui pourrais m'indiquer comment je peux faire que le logiciel que j'ai créer on puisse l'installer et l'utiliser sur un ordinateur sans Qt et mingw. En gros comme un logiciel normal que l'utilisateur n'ai qu'à installer à partir d'un setup.
Marsh Posté le 22-02-2008 à 16:32:58
Tu peux regarder du côté de InnoSetup ou NSIS. Au niveau réputation, le premier est plus facile, mais moins puissant que le second. Pour l'instant, le premier me suffit bien, vu que j'ai pas besoin de killer features dans l'installeur. Donc je te recommande celui-ci (au moins pour commencer ou te faire une première idée).
Marsh Posté le 22-02-2008 à 18:21:05
Et une dernière chose :
quelle est la fonction qui permet de redimensionner un QPushButton (hauteur et largeur) parce que setFixed...() ne fonctionne pas???
Marsh Posté le 22-02-2008 à 18:53:06
Si, ça devrait fonctionner, tu as un problème quelque part. Sinon, en moins contraignant, tu as resize.
Marsh Posté le 21-02-2008 à 22:01:12
Bonsoir tous le monde,
J'aurais aimé savoir comment afficher un objet QPainter dans une fenêtre principale créée sous QT bien sur.
Est-ce que je doit l'afficher dans un QLayout??
J'ai essayer dans un QSplitter mais vu que QPainter n'hérite pas de la classe QWidget j'ai une erreure lors de la compilation.
Merci d'avance