caster un pointeur en int ? [C++] - C++ - Programmation
Marsh Posté le 18-08-2006 à 17:15:53
ne le fais surtout pas, ce n'est absolument par portable et ça explosera sur du 64bits.
Et c'est quoi ce static_cast au dessus ?
Marsh Posté le 18-08-2006 à 17:21:22
Taz a écrit : ne le fais surtout pas, ce n'est absolument par portable et ça explosera sur du 64bits. |
C'est bien ce qui me semblait
Le static_cast est la méthode conseillée par la doc de QT pour récupérer les objets planqués derrère les "QModelIndex" (les items graphiques en quelque sorte).
Si on crée un QModelIndex à partir d'un toto, ce QModelIndex garde une sorte de handler sur ce toto, et on peut le récupèrer en faisant un static_cast sur index.internalPointer().
PS : à ton avis, y a-t-il là dedans une solution pour stocker un pointeur ? http://doc.trolltech.com/4.1/qbytearray.html
Marsh Posté le 21-08-2006 à 09:16:04
Bon ben temporairement je vais stocker l'item à drag&dropper dans une variable privée statique, ca sera "moins pire"
Marsh Posté le 27-08-2006 à 10:04:15
Et si... tu numérotait plutot quutiliser un pointeur.
Dans une QPtrList (ou autre) tu stocke les pointeurs vers noeuds de ton arbre.
Chaque noeud possède alors un numéro d'ordre dans la liste.
Tu fait référence à ce numéro d'ordre plutot qu'à un pointeur.
Note que ça peut tout de même avoir des conséquences si l'utilisateur vient à drag&dropper un noeud d'une application à une autre.
Marsh Posté le 18-08-2006 à 12:11:24
Bonjour ,
je vais vous expliquer pourquoi je vais faire quelque chose de sale, vous me direz ensuite si on peut faire un peu moins sale.
Je suis en train de faire un Model pour une QTreeView en QT, et j'aimerai pouvoir drag&dropper des items d'un endroit du QTreeView vers un autre endroit du QTreeView.
En QT le mécanisme de copy/paste et de drag&drop passe par des QMimeData. L'idée est qu'un item d'une widget quelconque est "marshallé" (sérializé ?) en QMimeData (objet qui comporte un champ "text/plain", "application/structure" ou autre mime type, et un QByteArray)
Ainsi à l'arrivée (au drop/paste) il est unmarshallé et on extrait les informations souhaitées.
Ca permet par exemple de copier/coller d'un Tree vers une TextArea : la ligne de l'arbre est marshallée en string, et à l'arrivée on lit la string)
Là je dois drag&drop une branche en interne du TreeView au TreeView. Et ma structure de données sous jacente (un arbre) n'a pas encore de méthode pour serialiser un sous-arbre.
Ce que j'ai envie de faire, c'est de mettre dans le QMimeData le pointeur sur le noeud de ma structure (le noeud qui est déplacé), comme ca à l'arrivée j'ai mon noeud à déplacer, et l'endroit où le mettre.
Problèmes :
1 - je suis en train de crée un Model pour TreeView dont les méthodes liées au MimeData auront un comportement dangereux si un jour ce truc est réutilisé et qu'on veut faire des opérations de ce widget vers un autre widget (bon ok c'est que pour moi, à titre privé, mais c'est le principe qui me gêne)
2 - ca ressemble en gros à ça (éloignez les enfants) :
marshalling :
unmarshalling :
Cast C-style, supposition que taille d'un pointeur = taille d'un entier, bref c'est sale...
Peut-on faire un peu moins sale en restant dans l'idée "stockons un pointeur" ?
PB : http://doc.trolltech.com/4.1/qmimedata.html
Message édité par Xavier_OM le 18-08-2006 à 12:13:24
---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.