programmation Qt: Comment utiliser le type de données personnalisé dans QVariantMap?
-
29-09-2019 - |
Question
Je suis en train d'écrire une application Qt qui associe une classe C ++ pour objet Javascript dans qtwebkit. Tout d'abord laissez-moi vous expliquer ce que je suis en train de faire:
J'ai une classe héritée de QObject:
class myobj : public QObject {
Q_OBJECT
public:
myobj();
~myobj();
pulbic slots:
void getData();
}
Et dans une autre classe que j'ai essayé d'ajouter MyObj cas à QVariantMap:
QVariantMap anotherClass::getObj() {
myobj* obj1 = new myobj();
myobj* obj2 = new myobj();
QVariantMap items;
items.insert(QString("0"), QVariant(*obj1));
items.insert(QString("1"), QVariant(*obj2));
return items;
}
Et puis je suis l'erreur suivante:
error: no matching function for call to ‘QVariant::QVariant(myobj&)’
J'ai donc essayé d'ajouter des déclarations:
Q_DECLARE_METATYPE(myobj);
Mais je suis:
error: ‘QObject::QObject(const QObject&)’ is private
Une idée à ce sujet?
La solution
Comme l'a dit le compilateur, aucun constructeur de QVariant
existe qui prennent un myobj
comme paramètre. Avez-vous essayé d'utiliser la fonction qVariantFromValue
à la place?
Je pense que c'est ce que vous recherchez.
Autres conseils
Si vous enregistrez votre type personnalisé avec Q_DECLARE_METATYPE (myobj), votre classe a besoin d'un constuctor public par défaut (ok), un destructor public (ok) et un constructeur de copie publique (MANQUE que le message d'erreur vous dit), voir le .