Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3045 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Canvas sous QT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Canvas sous QT

n°322121
vince_223
Posté le 03-03-2003 à 21:01:25  profilanswer
 


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 !!

mood
Publicité
Posté le 03-03-2003 à 21:01:25  profilanswer
 

n°322147
gloop
Posté le 03-03-2003 à 21:12:52  profilanswer
 

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.

n°322154
gloop
Posté le 03-03-2003 à 21:29:23  profilanswer
 

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.

n°322320
vince_223
Posté le 04-03-2003 à 10:05:15  profilanswer
 

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

n°322363
El_gringo
Posté le 04-03-2003 à 10:41:16  profilanswer
 

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...

n°322473
gloop
Posté le 04-03-2003 à 12:59:08  profilanswer
 

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...

n°322660
vince_223
Posté le 04-03-2003 à 16:19:02  profilanswer
 

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

n°322905
gloop
Posté le 04-03-2003 à 20:36:49  profilanswer
 

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. ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Canvas sous QT

 

Sujets relatifs
Comment faire une scrollbar pour un type Canvas ?Faire une scrollbar dans un Canvas
Probleme d'affichage de Canvas dans un panelcanvas resize
peut on enegistrer un canvas en image jpg ou bmp ?ScrollPane sur un canvas
[C++Builder] Rotation de Canvas[C++Builder] Effacement de texte dans un canvas
[C++Builder] Initialisation de canvas[C++Builder] Canvas
Plus de sujets relatifs à : Canvas sous QT


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)