diff --git a/declarativeimports/core/datamodel.cpp b/declarativeimports/core/datamodel.cpp index a5880f8b0..39386c0c8 100644 --- a/declarativeimports/core/datamodel.cpp +++ b/declarativeimports/core/datamodel.cpp @@ -125,7 +125,8 @@ void SortFilterModel::setSortOrder(const Qt::SortOrder order) DataModel::DataModel(QObject* parent) : QAbstractItemModel(parent), - m_dataSource(0) + m_dataSource(0), + m_maxRoleId(Qt::UserRole) { setObjectName("DataModel"); connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)), @@ -217,21 +218,21 @@ void DataModel::setItems(const QString &sourceName, const QVariantList &list) m_items[sourceName] = list.toVector(); if (!list.isEmpty()) { - int role = Qt::UserRole; - m_roleNames.clear(); - m_roleIds.clear(); - if (list.first().canConvert()) { foreach (const QString& roleName, list.first().value().keys()) { - ++role; - m_roleNames[role] = roleName.toLatin1(); - m_roleIds[roleName] = role; + if (!m_roleIds.contains(roleName)) { + ++m_maxRoleId; + m_roleNames[m_maxRoleId] = roleName.toLatin1(); + m_roleIds[roleName] = m_maxRoleId; + } } } else { foreach (const QString& roleName, list.first().value().keys()) { - ++role; - m_roleNames[role] = roleName.toLatin1(); - m_roleIds[roleName] = role; + if (!m_roleIds.contains(roleName)) { + ++m_maxRoleId; + m_roleNames[m_maxRoleId] = roleName.toLatin1(); + m_roleIds[roleName] = m_maxRoleId; + } } } diff --git a/declarativeimports/core/datamodel.h b/declarativeimports/core/datamodel.h index cbec8569e..0d9a35c37 100644 --- a/declarativeimports/core/datamodel.h +++ b/declarativeimports/core/datamodel.h @@ -132,6 +132,7 @@ private: QMap > m_items; QHash m_roleNames; QHash m_roleIds; + int m_maxRoleId; }; int DataModel::countItems() const