Я пытаюсь использовать пользовательские классы в QAbstractListModel, а Q_DECLARE_METATYPE не работает вообще!
Чтобы проверить, где проблема, я упростил код следующим образом:
#include <QMetaType>
#include <QVariant>
#include <QDebug>
typedef int x;
Q_DECLARE_METATYPE(x)
void main() {
QVariant v;
qDebug() << v.canConvert<x>();
}
а вывод все равно false!
btw, код, который я хочу реализовать, похож:
namespace ns{
class a {
public:
a(); //default constructor
a(const a&); //copy constructor
~a();
}
}
Q_DECALRE_METATYPE(ns::a);
и когда я пытаюсь переопределить QAbstractListModel:: data следующим образом:
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());
}
компилятор сообщит об ошибке и сделает следующее:
cannot convert const ns::a to QVariant::Type