Tout d'abord merci d'avoir pris le temps de répondre, et de me montrer un exemple.
Oui au final c'est ce que j'ai fait.
J'ai fait un système d'arbre pour mes données.
enum typeOfNode : char {ROOT,ETAPE,ELEMENT};
enum Direction :char{ HORIZONTAL,VERTICAL};
class Node
{
///----------------------------------
/// Attributs
///----------------------------------
protected :
Node* parent;
public :
QVector<Node*> child;
///----------------------------------
/// Methodes
///----------------------------------
public:
Node(Node* leParent = nullptr);
virtual ~Node();
virtual typeOfNode getType()const {return ROOT;}
Node* getParent() {return parent;}
virtual Node *GetChild(int row);
int childCount()const ;
int row()const ;
};
class ElementNode : public Node
{
///----------------------------------
/// Attributs
///----------------------------------
public :
double param1;
double param2;
Direction param3;
///----------------------------------
/// Methodes
///----------------------------------
public :
ElementNode(Node* p_parent=nullptr);
virtual Node* GetChild(int row){Q_UNUSED(row);return nullptr;}
virtual typeOfNode getType()const{return ELEMENT;}
};
class EtapeNode : public Node
{
///----------------------------------
/// Attributs
///----------------------------------
public :
QString titre;
///----------------------------------
/// Methodes
///----------------------------------
public :
EtapeNode (Node* p_parent =nullptr,QString label = "N.D.");
virtual typeOfNode getType()const{return ETAPE;}
};
class TreeModel : public QAbstractItemModel
{
///----------------------------------
/// Attributs
///----------------------------------
protected :
Node* root;
///----------------------------------
/// Methodes
///----------------------------------
public:
explicit TreeModel(QObject *parent = nullptr);
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
virtual int rowCount(const QModelIndex & parent) const;
virtual int columnCount(const QModelIndex&)const;
virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
virtual QModelIndex parent(const QModelIndex &child)const;
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::DisplayRole);
bool AddEtape(QString Titre);
bool AddElement(QModelIndex& etapeParente, QString Titre);
protected :
QModelIndex IndexForNode(Node *const node)const ;
Node* NodeForIndex(QModelIndex index)const ;
};
avec root qui stock les étapes et les étape qui stock les éléments.
Effectivement les QTreeView donne mal à la tête mais une fois qu'on a compris ça va. Dommage qu'il n'y ai pas plus de tutoriel généraliste sur le sujet.