programmazione Qt: Come usare il tipo di dati personalizzato in QVariantMap?
-
29-09-2019 - |
Domanda
Sto scrivendo un'applicazione Qt che mappa una classe C ++ per oggetto javascript nel QtWebKit. In primo luogo lasciatemi spiegare quello che sto cercando di fare:
Ho una classe ereditata da QObject:
class myobj : public QObject {
Q_OBJECT
public:
myobj();
~myobj();
pulbic slots:
void getData();
}
E in un'altra classe Ho provato ad aggiungere myObj istanze 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;
}
E poi ho ricevuto il seguente errore:
error: no matching function for call to ‘QVariant::QVariant(myobj&)’
Così ho provato ad aggiungere dichiarazioni:
Q_DECLARE_METATYPE(myobj);
Ma ho ottenuto:
error: ‘QObject::QObject(const QObject&)’ is private
Qualche idea su questo?
Soluzione
Come il compilatore ha detto, nessun costruttore di QVariant
esiste che prendono un myobj
come parametro. Hai provato a utilizzare la funzione qVariantFromValue
invece?
Credo che questo è ciò che si sta cercando.
Altri suggerimenti
Se si registra il tipo personalizzato con Q_DECLARE_METATYPE (myObj), la classe ha bisogno di un constuctor predefinito pubblico (ok), un distruttore pubblico (ok) e un costruttore di copia pubblica (mancanti che il messaggio di errore che si sta dicendo), vedere la documentazione .