Canvas sous QT

Canvas sous QT - C++ - Programmation

Marsh Posté le 03-03-2003 à 21:01:25    


Voila voila,
 
je dois réaliser un logiciel de dessin sous linux, avec les librairies QT.
 
apparament, le plus simple est d'utiliser les QCanvas.
 
Mais voila, je comprend pas bien comment marche les QCanvas...
si quelqu'un veut bien m'expliquer ou si vous avez des tutoriaux (en francais si possible) sur QT avec les QCanvas, je suis preneur !!

Reply

Marsh Posté le 03-03-2003 à 21:01:25   

Reply

Marsh Posté le 03-03-2003 à 21:12:52    

y a un excellent exemple des canvas livré avec Qt.
Le principe est relativement simple. Ca fonctionne comme tous les autres widgets de Qt, par relation parent-enfant.
Dans ton QCanvas, tu peux mettre des objets de type QCanvasItem ou dérivé (y en a quelques un de base comme des ellipses, des lignes, des pixmaps, des polygones quelconques, des rectangles, du texte...).
Si tu veux créer des items pour le canvas, tu dérives de QCanvasItem (ou plus spécialisé si nécessaire).
Pour qu'un item soit dans un canvas, il suffit que le canvas soit le parent de l'item. comme avec les autres widgets de Qt.

Reply

Marsh Posté le 03-03-2003 à 21:29:23    

j'ai oublié de te dire un truc:
on ne peut pas afficher un QCanvas. il faut créer un QCanvasView qui contiendra le QCanvas.exemple:

Code :
  1. QCanvas     *canvas = new QCanvas (largeur, hauteur);
  2. QCanvasView *canvasView = new QCanvasView (canvas, widgetParent);

 
tu peux changer le canvas du canvas view par setCanvas. Ce mécanisme te permet d'avoir plusieurs canvas facilement pour présenter plusieurs vuew alternativement.

Reply

Marsh Posté le 04-03-2003 à 10:05:15    

Merci de tes précision gloop .
 
Les CanvasItems peuvent-ils etre transparents (en partie) ?

Reply

Marsh Posté le 04-03-2003 à 10:41:16    

gloop a écrit :

j'ai oublié de te dire un truc:
on ne peut pas afficher un QCanvas. il faut créer un QCanvasView qui contiendra le QCanvas.exemple:

Code :
  1. QCanvas     *canvas = new QCanvas (largeur, hauteur);
  2. QCanvasView *canvasView = new QCanvasView (canvas, widgetParent);

 
tu peux changer le canvas du canvas view par setCanvas. Ce mécanisme te permet d'avoir plusieurs canvas facilement pour présenter plusieurs vuew alternativement.


 
ça a l'air excellent QT...

Reply

Marsh Posté le 04-03-2003 à 12:59:08    

vince_223 a écrit :

Merci de tes précision gloop .
 
Les CanvasItems peuvent-ils etre transparents (en partie) ?
 


pour les QCanvasPixmap, oui. utilise le  canal alpha du QPixmap que tu passes au constructeur du QCanvasPixmap. pour les autres, je crois pas, à moins de gérer ca toi meme  :D  
un autre truc sympa avec les QCanvasItem, c'est l'animation. avec setAnimated (true) sur un QCanvasItem, la fonction advance () (que tu peux surcharger) est appelée avec en parametre 0 ou 1. si c'est 0, ca bouge pas, si c'est 1, ca bouge. Ce paramètre dépend de la vélocité que tu vas lui donner en x et y (setVolicity).
 
pour chaque QCanvasItem, t'as 3 coordonées, meme si c'est de la 2D. le z, c'est pour savoir quel item est au-dessus de l'autre.
 
si t'as besoin de gérer les collisions, regarder la méthode collisions () qui te donne la liste des items en collision avec le QCanvasItem. ou encore une des méthodes collisions de QCanvas qui te donne les items à une certaine coordonnée en intersection avec une zone spécifiée...

Reply

Marsh Posté le 04-03-2003 à 16:19:02    

ok  
En faite je doit realisé un schema (style une porte) sur lequel on place des elements(rond rectangle) qui doivent se placer automatiquement en fonction d'une grille attractive.
 
 c elements doivent etre supprimable, deplacable et ne peuvent pas etre superposable.
 
Sur le schema il doit aussi y avoir des zones sur lesquelles on ne peut pas placer d'elements.
 
On doit pouvoir modifier le pas de la grile a tout moment et pouvoir zoomer .
aussi de part et d'autre du schema, il doit y avoirdes règles( gradué)
 
gloop, tu crois que les canvas serait impecable pour ce genre de graphisme ?
 
Et est ce que tu aurais un exemple un peu plus explicite dans l'utilisation des QCanvas que celui livré avec QT ?
 
Merci

Reply

Marsh Posté le 04-03-2003 à 20:36:49    

vince_223 a écrit :

ok  
En faite je doit realisé un schema (style une porte) sur lequel on place des elements(rond rectangle) qui doivent se placer automatiquement en fonction d'une grille attractive.
 
 c elements doivent etre supprimable, deplacable et ne peuvent pas etre superposable.
 
Sur le schema il doit aussi y avoir des zones sur lesquelles on ne peut pas placer d'elements.
 
On doit pouvoir modifier le pas de la grile a tout moment et pouvoir zoomer .
aussi de part et d'autre du schema, il doit y avoirdes règles( gradué)
 
gloop, tu crois que les canvas serait impecable pour ce genre de graphisme ?
 
Et est ce que tu aurais un exemple un peu plus explicite dans l'utilisation des QCanvas que celui livré avec QT ?
 
Merci


 
les déplacements des items d'un canvas ne sont pas gérés de base (tu peux pas cliquer et déplacer). par contre, l'exemple devrait t'aider.
 
pour controler les superpositions, utilise les méthodes collision s de la class QCanvas.
 
pour la grille, tu peux utiliser QCanvasSpline et utiliser les points de controler de la spline pour ta grille.
 
pour le zoom, tu calcules les nouvelles coordonnées en fonction de ton facteur de zoom et c'est bon. Tu peux faire plus simple si tu n'utilises que des rectangles (QCanvasRectangle) et ellipse (QCanvasEllipse), parce que tu peux modifier leur taille directement (setSize)
 
le canvas devrait faire l'affaire (c'est pas la seule solution, mais sans doute la plus simple). pour l'exemple, je viens de regarder le code et ca me semble suffisament explcite. ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed