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 :

[QTreeWidget] Attacher un objet aux QTreeWidgetItem


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Par défaut [QTreeWidget] Attacher un objet aux QTreeWidgetItem
    Slaut à tous,

    Je cherche à attacher un de mes objets aux QTreeWidgetItem de mon abre.
    Je n'ai pas de problème pour créer mon arbre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QTreeWidgetItem * deviceItem = new QTreeWidgetItem(ui.myTreeView);
    deviceItem->setIcon(0, QIcon(QPixmap(":/QTClient/Resources/1.bmp"))) ;
    deviceItem->setText(0, QString("Salut") );
    Une fois que c'est fait j'esssai d'attacher une référence vers mon objet à l'item.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deviceItem->setData(0,Qt::UserRole,refMonObjet);
    Mais en faisant ça, lorsque ej récupère mon item (après un clic sur l'arbre par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTreeWidgetItem * item = ui.deviceTreeView->itemAt(iPosition) ;
    le champ data est à NULL , j'ai essaaer de faire la même chose avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deviceItem->setData(0,Qt::UserRole,QString("toto");
    Et la ça fonctionne. Après quelques recherche il me semble qu'il faudrait utiliser Q_DECLARE_METATYPE ou un truc du genre mais ça n'a mené à rien jusqu'ici.

    Quelqu'un sait comment "liéer" un objet d'une classe (en dehors des classes de base) à un QTreeWidgetItem

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Ton type est-il connu par QVariant? Si non, alors faut pas chercher plus loin

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Par défaut .
    Je suppose que non, mais il me semble que faire un qRegisterMetaType rend justement mon type connu par QVariant, je me trompe ?

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 228
    Par défaut .
    En fait il y à un peu de ça, si on lit http://irmatden.developpez.com/tutoriels/qvariant/ il faut construire le QVariant avec sa propre classe.

    Dans le cas des QTreeWidgetItem appeler simplent QTreeWidgetItem::setData ne suffit pas, il faut

    1/ Déclarer son "méta type" avec la macro Q_DECLARE_METATYPE():
    2/ Construire un QVariant avec le méta type que l'on vien de déclarer
    3/ utiliser QTreeWidgetItem::setData()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    QVariant var;
    MaClasse monInstance;
    var.setValue(monInstance);
    [...]
    QTreeWidgetItem * item = new QTreeWidgetItem(parentItem);
    serviceItem->setData(0,Qt::UserRole,var);
    [...]
    La récupération ce fait normalement par la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClasse monInstance = item->data(0,Qt::UserRole).value<MaClasse>();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 02/07/2015, 16h15
  2. Abonner un objet aux évènements d'un autre
    Par -N4w4k- dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/05/2012, 16h25
  3. Réponses: 1
    Dernier message: 08/10/2009, 13h39
  4. Attacher un event aux liens present dans un AxWebBrowser
    Par Aran-Galad dans le forum Windows Forms
    Réponses: 0
    Dernier message: 11/08/2009, 14h51
  5. Accés rapide aux propriétés d'un Objet
    Par Alacazam dans le forum C++Builder
    Réponses: 4
    Dernier message: 28/11/2002, 21h56

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