Próbuję użyć niestandardowych klas w QAbstractListModel, a Q_DECLARE_METATYPE w ogóle nie działa!Q_DECLARE_METATYPE nie działa w ogóle
Aby sprawdzić, gdzie jest problem, mam uproszczony kod jak poniżej:
#include <QMetaType>
#include <QVariant>
#include <QDebug>
typedef int x;
Q_DECLARE_METATYPE(x)
void main() {
QVariant v;
qDebug() << v.canConvert<x>();
}
i wyjście jest nadal fałszywe!
btw, kod Chcę wdrożyć to tak:
namespace ns{
class a {
public:
a(); //default constructor
a(const a&); //copy constructor
~a();
}
}
Q_DECALRE_METATYPE(ns::a);
i gdy próbuję reimplement QAbstractListModel :: dane tak:
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());
}
kompilator zgłosi błąd i tak:
cannot convert const ns::a to QVariant::Type
yep, nagle uświadomić sobie, gdzie rzecz w tym. Problem polega na tym, że przy implementacji 'MyModel :: data (const QModelIndex & index, int role) const', powinienem użyć' return QVariant :: fromValue (MyClass) 'zamiast' return Myclass'. – user2826776
Czytanie [niestandardowego typu dokumentu Qt] (http://doc.qt.io/qt-5/custom-types.html), nie byłem pewien, jak używać tego makra. Kiedy 'Q_DECLARE_METATYPE (MyClass);' znajduje się wewnątrz zakresu samej klasy, kompilacja kończy się niepowodzeniem z błędem 'jawna specjalizacja w zakresie nie-przestrzeni 'klasy MyClass''. Przykład pokazuje poprawną lokalizację do wstawienia makra. Dzięki! – fgiraldeau