IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Drag and drop sur qtreeview et qvariant


Sujet :

Qt

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Drag and drop sur qtreeview et qvariant
    Bonjour,

    J'ai un problème avec du drag and drop sur un qtreeview. Mes données ont un rôle utilisateur contenant un pointeur. J'ai utilisé la macro Q_DECLARE_METATYPE pour pouvoir utiliser un qvariant pour stocker mon pointeur. J'ai redéfini les méthodes itemData() et setItemData() du modèle.

    Tout compile sans problème mais dès que je commence de "dragger" un item j'ai une cascade de message d'erreur qui apparaissent "QVariant::save Invalid type to save".
    J'ai creusé et le problème semble venir de QMetaType::save() qui essait de streamer le QVariant dans un QDataStream. Je n'ai pas redéfini les opérateurs de flux pour ma classe de données. Le but de passer un pointeur est justement de ne pas avoir à passer l'objet lui-même. Mais étant justement un pointeur, je ne devrais pas avoir d'erreur à ce moment là non ?

    Je ne sais plus trop quoi essayer maintenant...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    J'ai pu isoler mon problème, ce sera sûrement plus simple à comprendre.

    Dans ma classe TreeModel, qui hérite de QAbstractItemModel, j'ai redéfini la méthode itemData :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    QMap<int, QVariant> TreeModel::itemData(const QModelIndex& rIndex) const
    {
    	QMap<int, QVariant> DataMap = QAbstractItemModel::itemData(rIndex);
     
    	for (int RoleIndex = Qt::UserRole; RoleIndex < TreeItem::TIDR_COUNT; ++RoleIndex)
    	{
    		DataMap.insert(RoleIndex, data(rIndex, RoleIndex));
    	}
     
    	QByteArray ByteArray;
    	QDataStream DataStream(ByteArray);
     
    	DataStream << DataMap;
     
    	return DataMap;
    }
    La méthode data de TreeModel appelle la méthode data de TreeItem qui, pour le rôle en question, fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else if (Role == TreeItem::TIDR_POINTER)
    {
    	Data.setValue<TreeItem*>(m_pItemPointer);
    }
    Où m_pItemPointer et un TreeItem*. J'ai utilisé la macro Q_DECLARE_METATYPE(TreeItem*) après la déclaration de la classe TreeItem.

    La partie de itemData() qui me pose problème est :

    Ça n'a aucune sens comme c'est fait dans ma méthode mais c'est uniquement pour montrer ce qui m'ennuie. Le streaming dans un QDataStream est effectué par QAbstractItemModel::startDrag().

    Dès que je commence à effectuer un drag and drop dans mon arbre j'ai des messages

    ASSERT failure in QVariant::save: "Invalid type to save"
    et
    QVariant::save: unable to save type 259

    Que dois-je faire en plus pour que mon QVariant avec un type personnalisé puisse être balancé dans un QDataStream ? Le type étant un pointeur je ne vois pas en quoi les opérateurs de flux de TreeItem pourraient m'aider...

  3. #3
    Membre du Club Avatar de beni46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Points : 63
    Points
    63
    Par défaut
    As tu résolu ton problème? J'ai le même genre de problème:
    QVariant::save: unable to save type 259


    Merci.

    Bye

Discussions similaires

  1. Drag and drop sur une PictureBox
    Par abdiouldbody dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 17/06/2009, 15h55
  2. drag and drop sur une listBox?
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 30/09/2006, 10h27
  3. Drag and drop sur du text ?
    Par isa150183 dans le forum JSF
    Réponses: 2
    Dernier message: 05/07/2006, 06h28
  4. Drag and drop sur un JTree
    Par tomca dans le forum Composants
    Réponses: 4
    Dernier message: 02/08/2005, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo