Qt-Programmierung: Wie benutzerdefinierten Datentyp in QVariantMap benutzen?
-
29-09-2019 - |
Frage
Ich schreibe eine Qt-Anwendung, die Karten eine C ++ Klasse Javascript-Objekt in QtWebKit. Zunächst lassen Sie mich erklären, was ich zu tun versuchen:
Ich habe eine Klasse von QObject geerbt:
class myobj : public QObject {
Q_OBJECT
public:
myobj();
~myobj();
pulbic slots:
void getData();
}
Und in einer anderen Klasse habe ich versucht, myobj Instanzen QVariantMap hinzuzufügen:
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;
}
Und dann bekam ich folgende Fehlermeldung:
error: no matching function for call to ‘QVariant::QVariant(myobj&)’
So habe ich versucht, Erklärungen hinzuzufügen:
Q_DECLARE_METATYPE(myobj);
Aber ich habe:
error: ‘QObject::QObject(const QObject&)’ is private
Jede Idee, über das?
Lösung
Wie die Compiler gesagt, existiert kein Konstruktor QVariant
dass ein myobj
als Parameter übernehmen. Haben Sie die qVariantFromValue
Funktion stattdessen zu verwenden versucht?
Ich denke, das ist das, was Sie suchen.
Andere Tipps
Wenn Sie Ihren benutzerdefinierten Typen mit Q_DECLARE_METATYPE (myobj) registrieren, der Klasse einen öffentlichen Standard Konstruktor (ok) braucht, ein öffentliches destructor (ok) und ein öffentliches Copykonstruktor (FEHLEND welche die Fehlermeldung sagen Sie) finden Sie in der Dokumentation .