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?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top