Je suis un débutant avec la programmation Model/View de Qt et j'ai lu le Editable Tree Model Example dans la documentation de Qt. La caractéristique intéressante dans cet exemple est qu'un seul objet (TreeItem
) encapsule deux éléments d'information qui sont affichés plus tard dans une seule ligne contenant deux colonnes (name
et description
) grâce à l'annulation de QModelIndex QAbstractItemModel::index
et QVariant QAbstractItemModel::data
.Est-ce que deux objets QStandardItem peuvent gérer différents attributs du même objet?
Maintenant, j'ai aussi une classe personnalisée (par exemple Foo
) contenant deux éléments d'information (Foo::m_name
et Foo::m_description
) que je veux afficher dans une seule ligne contenant deux colonnes, mais au lieu de subclassing QAbstractItemModel
que je veux sous-classe QStandardItemModel
parce que il a beaucoup de fonctionnalités. Cependant, il semble que je dois créer deux objets QStandardItem
pour chacun de mes objets Foo
, un pour gérer m_name
et un autre pour gérer m_description
. Comment puis-je conserver un seul objet Foo
en mémoire et faire référence à ces deux objets QStandardItem
?
Dans ma question, il y a l'hypothèse implicite qu'il faut créer un objet QStandardItem
pour chaque paire (ligne, colonne). S'il vous plaît laissez-moi savoir si c'est faux.
j'avais déclaré 'Q_DECLARE_METATYPE (Foo *) 'et stocké un' QVariant 'dans le' QStandardItem' pour éviter de stocker l'objet 'Foo'. Cependant, cela m'a conduit à devoir instancier deux objets 'QStandardItem' pour chaque objet' Foo', et j'espérais qu'il y avait une solution de contournement. –
jmborr
Comme je l'ai dit: le 'QStandardItemModel' utilise un QStandardItem par cellule comme principe de conception. Son cas d'utilisation est de stocker des données dans le modèle plutôt que d'être une interface avec des données stockées ailleurs. –