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 :

Convertir une classe qui hérite de QObject en QVariant


Sujet :

Qt

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut Convertir une classe qui hérite de QObject en QVariant
    Bonjour tout le monde,

    Je souhaite faire une classe qui hérite de QObject (nécessaire pour l'envoie/réception de signaux) qui puisse être convertie en QVariant.

    Voici ce que j'ai fait mais malheureusement, ça ne compile pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <QObject>
    #include <QVariant>
     
    class CustomClass : public QObject
    {
    Q_OBJECT
    public:
       CustomClass(QObject * parent = nullptr) : QObject(parent) {}
     
    /// le reste de mes méthodes, signaux, etc....
    };
     
    Q_DECLARE_METATYPE(CustomClass)
    Quelqu'un a des pistes svp?

    Merci

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 693
    Points : 2 422
    Points
    2 422
    Par défaut
    Bonjour.

    Quels sont les messages d'erreur ?

    En fouillant un peu sur le net, j'ai trouvé return QVariant::fromValue(myCustomObject); pour transformer ton objet en QVariant, et CustomType ct = myVariant.value<CustomType>(); ou CustomType ct = qvariant_cast<CustomType>(myVariant); pour l'opération inverse.

    Tout est dans la doc :
    QVariant::fromValue
    qvariant_cast
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    En fait, je viens de réussir de compiler en changeant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Q_DECLARE_METATYPE(CustomClass)
    Par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Q_DECLARE_METATYPE(CustomClass*)
    Le problème vient du fait que la classe QObject n'a pas de constructeur de copie.

    Sinon effectivement, j'utilise les méthodes QVariant::fromValue et qvariant_cast.

    J'aurais préféré faire une copie de mon objet, mais bon si c'est vraiment pas possible, je ferais autrement.

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 607
    Points : 188 574
    Points
    188 574
    Par défaut


    Citation Envoyé par darkman19320 Voir le message
    J'aurais préféré faire une copie de mon objet, mais bon si c'est vraiment pas possible, je ferais autrement.
    Ça n'est pas vraiment possible : un QObject a vraiment une "identité", ce n'est pas une valeur (https://cpp.developpez.com/faq/cpp/?...tique-d-entite). Ainsi, deux boutons dans une interface avec le même texte, le même style, la même action, etc. ne sont pas forcément égaux. Autant ça a du sens de copier un entier, autant "copier" ton chien semble bizarre.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 616
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 616
    Points : 30 833
    Points
    30 833
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ne peux-tu pas intégrer le QVariant dans ton QObject plutôt que transformer ton QObject ? Surtout que le QVariant est un truc inhérent au QObject justement pour permettre au QObject d'embarquer des valeurs de travail. C'est ce que je fais tout le temps. Je gère des bdd et j'affiche les infos dans des QListWidget ben chaque QListWidgetItem qui affiche une info de ma bdd embarque en QVariant l'identitfiant interne bdd de l'info. Ainsi, quand l'utilisateur sélectionne le QListWidgetItem qui l'intéresse, je peux récupérer de quelle info il s'agit pour récupérer et afficher ensuite de la bdd les détails de ladite info...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/09/2018, 16h50
  2. Réponses: 1
    Dernier message: 13/05/2009, 10h41
  3. Réponses: 2
    Dernier message: 22/04/2008, 12h13
  4. Réponses: 7
    Dernier message: 25/03/2005, 15h05
  5. Réponses: 14
    Dernier message: 14/03/2005, 10h16

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