Guest User

Untitled

a guest
May 1st, 2025
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1.  #ifndef JSONMODEL_H
  2. #define JSONMODEL_H
  3.  
  4. #include <QVariant>
  5. #include <QModelIndex>
  6. #include <QAbstractItemModel>
  7.  
  8. class Components;
  9. class JsonModel : public QAbstractItemModel
  10. {
  11.     Q_OBJECT
  12.  
  13. public:
  14.     JsonModel(std::shared_ptr<Components> rootElement);
  15.  
  16.     QModelIndex index(int row, int column, const QModelIndex &parent = {}) const override;
  17.     QVariant data(const QModelIndex &index, int role) const override;
  18.     QModelIndex parent(const QModelIndex &index) const override;
  19.     int rowCount(const QModelIndex &parent = {}) const override;
  20.     int columnCount(const QModelIndex &parent = {}) const override;
  21.  
  22. private:
  23.     std::shared_ptr<Components> m_rootElement;
  24. };
  25.  
  26. #endif // JSONMODEL_H
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36. // jsonmodel.cpp
  37.  
  38.  
  39. #include "jsonmodel.h"
  40. #include "components.h"
  41.  
  42. JsonModel::JsonModel(std::shared_ptr<Components> rootElement) {
  43.     m_rootElement = rootElement;
  44. }
  45.  
  46. QModelIndex JsonModel::index(int row, int column, const QModelIndex &parent) const {
  47.     if (!hasIndex(row, column, parent))
  48.         return {};
  49.  
  50.     Components *parentItem = parent.isValid() ? static_cast<Components*>(parent.internalPointer()) : m_rootElement.get();
  51.  
  52.     Components *childItem = parentItem->child(row);
  53.     if (childItem == nullptr)
  54.         return {};
  55.     return createIndex(row, column, childItem);
  56. }
  57.  
  58. QVariant JsonModel::data(const QModelIndex &index, int role) const {
  59.     if (!index.isValid() || role != Qt::DisplayRole)
  60.         return {};
  61.  
  62.     const Components *item = static_cast<const Components*>(index.internalPointer());
  63.     return item->data(index.column());
  64. }
  65.  
  66. int JsonModel::rowCount(const QModelIndex &parent) const {
  67.     // Only column 0 has children
  68.     if (parent.column() > 0)
  69.         return 0;
  70.  
  71.     const Components *parentItem = parent.isValid() ? static_cast<const Components*>(parent.internalPointer()) : m_rootElement.get();
  72.     return parentItem->childCount();
  73. }
  74.  
  75. int JsonModel::columnCount(const QModelIndex &parent) const {
  76.     if (parent.isValid())
  77.         return static_cast<Components*>(parent.internalPointer())->columnCount();
  78.     return m_rootElement->columnCount();
  79. }
  80.  
  81. QModelIndex JsonModel::parent(const QModelIndex &index) const {
  82.     if (!index.isValid())
  83.         return {};
  84.  
  85.     Components *childItem = static_cast<Components*>(index.internalPointer());
  86.     Components *parentItem = childItem->parent();
  87.  
  88.     return parentItem != m_rootElement.get() ? createIndex(parentItem->row(), 0, parentItem) : QModelIndex{};
  89. }
  90.  
Advertisement
Add Comment
Please, Sign In to add comment