Sto provando a utilizzare le classi personalizzate in QAbstractListModel e il Q_DECLARE_METATYPE non funziona affatto!Q_DECLARE_METATYPE non funziona affatto
Per verificare dove sia il problema, ho semplificato il codice come il seguente:
#include <QMetaType>
#include <QVariant>
#include <QDebug>
typedef int x;
Q_DECLARE_METATYPE(x)
void main() {
QVariant v;
qDebug() << v.canConvert<x>();
}
e l'uscita è ancora falso!
btw, il codice che voglio implementare è come:
namespace ns{
class a {
public:
a(); //default constructor
a(const a&); //copy constructor
~a();
}
}
Q_DECALRE_METATYPE(ns::a);
e quando cerco di reimplementare QAbstractListModel :: i dati in questo modo:
QList<ns::s> list; //this is actually a member field of the custom model.
QVariant MyListModel::data(const QModelIndex& index, int role) const {
Q_UNUSED(role)
return list.at(index.row());
}
il compilatore segnalerà e errore come:
cannot convert const ns::a to QVariant::Type
sì, all'improvviso mi rendo conto dove il il problema è il problema è che quando si implementa 'MyModel :: data (const QModelIndex e index, int role) const, dovrei usare' return QVariant :: fromValue (MyClass) 'piuttosto che' return Myclass'. – user2826776
Leggendo il [Qt custom type doc] (http://doc.qt.io/qt-5/custom-types.html), non ero sicuro di come usare la macro. Quando 'Q_DECLARE_METATYPE (MyClass);' è all'interno dell'ambito della classe stessa, la compilazione fallisce con l'errore 'specializzazione esplicita in classe MyClass 'non di spazio dei nomi'. L'esempio mostra la posizione corretta per inserire la macro. Grazie! – fgiraldeau