| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- #include "DataListModel.h"
- DataListModel::DataListModel(QObject *parent)
- : QAbstractListModel(parent), m_nextRole(Qt::UserRole + 1)
- {
- // 初始化一些默认角色
- }
- int DataListModel::rowCount(const QModelIndex &parent) const
- {
- Q_UNUSED(parent);
- return m_data.size();
- }
- QVariant DataListModel::data(const QModelIndex &index, int role) const
- {
- if (!index.isValid() || index.row() >= m_data.size())
- {
- return QVariant();
- }
- const QVariantMap &entry = m_data.at(index.row());
- QString roleName = m_roles.value(role);
- return entry.value(roleName);
- }
- QHash<int, QByteArray> DataListModel::roleNames() const
- {
- return m_roles;
- }
- bool DataListModel::setData(const QModelIndex &index, const QVariant &value, int role)
- {
- if (!index.isValid() || index.row() >= m_data.size())
- {
- return false;
- }
- QString roleName = m_roles.value(role);
- if (roleName.isEmpty())
- {
- return false;
- }
- m_data[index.row()][roleName] = value;
- emit dataChanged(index, index, {role});
- return true;
- }
- Qt::ItemFlags DataListModel::flags(const QModelIndex &index) const
- {
- if (!index.isValid())
- {
- return Qt::NoItemFlags;
- }
- return Qt::ItemIsEditable | QAbstractListModel::flags(index);
- }
- void DataListModel::append(const QVariantMap &entry)
- {
- beginInsertRows(QModelIndex(), m_data.size(), m_data.size());
- m_data.append(entry);
- endInsertRows();
- }
- void DataListModel::insert(int index, const QVariantMap &entry)
- {
- if (index < 0 || index > m_data.size())
- {
- return;
- }
- beginInsertRows(QModelIndex(), index, index);
- m_data.insert(index, entry);
- endInsertRows();
- }
- void DataListModel::remove(int index)
- {
- if (index < 0 || index >= m_data.size())
- {
- return;
- }
- beginRemoveRows(QModelIndex(), index, index);
- m_data.remove(index);
- endRemoveRows();
- }
- void DataListModel::clear()
- {
- beginResetModel();
- m_data.clear();
- endResetModel();
- }
- void DataListModel::setProperty(int index, const QString &property, const QVariant &value)
- {
- if (index < 0 || index >= m_data.size())
- {
- return;
- }
- // 如果属性不存在,自动添加角色
- if (!m_roles.key(property.toUtf8())) {
- addRole(property);
- }
- m_data[index][property] = value;
- QModelIndex modelIndex = createIndex(index, 0);
- int role = m_roles.key(property.toUtf8());
- emit dataChanged(modelIndex, modelIndex, {role});
- }
- QVariantMap DataListModel::get(int index) const
- {
- if (index < 0 || index >= m_data.size())
- {
- return QVariantMap();
- }
- return m_data.at(index);
- }
- int DataListModel::count() const
- {
- return m_data.size();
- }
- void DataListModel::addRole(const QString &roleName)
- {
- if (m_roles.values().contains(roleName.toUtf8()))
- {
- return;
- }
- m_roles[m_nextRole++] = roleName.toUtf8();
- // emit roleNamesChanged();
- }
|