DataListModel.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef DATALISTMODEL_H
  2. #define DATALISTMODEL_H
  3. #include <QAbstractListModel>
  4. #include <QVector>
  5. #include <QVariantMap>
  6. #include <QMutex>
  7. #include <QMutexLocker>
  8. class DataListModel : public QAbstractListModel
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit DataListModel(QObject *parent = nullptr);
  13. // 基本模型接口
  14. int rowCount(const QModelIndex &parent = QModelIndex()) const override;
  15. QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
  16. QHash<int, QByteArray> roleNames() const override;
  17. bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
  18. Qt::ItemFlags flags(const QModelIndex &index) const override;
  19. // 类似 QML ListModel 的接口
  20. Q_INVOKABLE void append(const QVariantMap &entry);
  21. Q_INVOKABLE void insert(int index, const QVariantMap &entry);
  22. Q_INVOKABLE void remove(int index);
  23. Q_INVOKABLE void clear();
  24. Q_INVOKABLE void setProperty(int index, const QString &property, const QVariant &value);
  25. Q_INVOKABLE QVariantMap get(int index) const;
  26. Q_INVOKABLE int count() const;
  27. // 动态属性支持
  28. Q_INVOKABLE void addRole(const QString &roleName);
  29. private:
  30. QVector<QVariantMap> m_data;
  31. QHash<int, QByteArray> m_roles;
  32. int m_nextRole;
  33. };
  34. #endif // DATALISTMODEL_H