Кратко задача такая:
Необходимо отобразить в qml список сложных объектов. Модель списка должна быть описана в Qt коде. И,
самое главное, эта модель должна возвращать не отдельные свойства элемента (так всё работает), а целый элемент. Отдельные же свойства должны выделяться в qml из этого цельного элемента.
Более подробно:
Есть объект элемента списка со свойством name:
class CQMLAbonent : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE set_name NOTIFY chgd_name )
...
};
Q_DECLARE_METATYPE(CQMLAbonent) // это чтобы в QVariant можно было засунуть
Есть модель представления списка
class CQMLModelAbonent : public QAbstractListModel
{
...
public:
enum eRoles
{
TR_Abon = Qt::UserRole + 1,
...
};
explicit CQMLModelAbonent(QObject *parent = 0):QAbstractListModel(parent)
{
QHash<int, QByteArray> roles;
roles[TR_Abon] = "abonent";
...
setRoleNames(roles);
}
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
{
...
switch( (eRoles)role )
{
case TR_Abon:
{
CQMLAbonent o( "name" + QString::number( index.row() ) );
QVariant v;
v.setValue(o);
return v;
}
...
}
}
...
};
Она возвращает элемент списка.
Всё это в ф-ии main сделано дуступным из qml
Далее код в qml
ListView
{
id: listView
model: core.abons
delegate:
Item
{
...
Text
{
...
text: abonent.name
}
}
}
И вместо корректных имён пишется
undefinedЕсли вместо
abonent.name написать
abonent, то выводится
QVariant(CQMLAbonent)