J'ai un modèle qui fonctionne bien avec QTreeView. Dans le modèle que je mis en œuvre une sorte qui ressemble à ceci:Est-ce que QML TreeView prend en charge le signal layoutChanged émis par le modèle?
void SimpleTreeModel::sort(Node* sortedNode)
{
emit layoutAboutToBeChanged(QList<QPersistentModelIndex>(), VerticalSortHint);
QModelIndexList oldIndices = persistentIndexList();
Node::SortType sortType = Node::Down;
//sort starting node
sortedNode->sortChildren(sortType);
QModelIndexList newIndices;
newIndices.reserve(oldIndices.size());
for(const auto &i : oldIndices)
{
Node* node = const_cast<Node*>(nodeFromIndex(i));
QModelIndex index = indexFromNode(node);
newIndices.push_back(index);
}
changePersistentIndexList(oldIndices, newIndices);
QModelIndex startingIndex = indexFromNode(sortedNode);
emit layoutChanged({ QPersistentModelIndex(startingIndex) }, VerticalSortHint);
}
quand j'appelle cette fonction, QTreeView met à jour la vue, mais TreeView en QML ne font pas cela. QML utilisation TreeView:
TreeView
{
model: treeModel
TableViewColumn
{
title: "Title"
role: "title"
width: 700
}
}
Qu'est-ce que je fais mal? Pourquoi la vue ne met pas à jour la disposition des éléments après le tri?
Merci pour la réponse. Mais je ne peux pas comprendre comment cela devrait aider. Le problème est que TreeView ne répond pas aux signaux du modèle. Après avoir lu le code source de TreeView, je n'y ai pas trouvé les fonctions responsables de répondre au signal layoutChanged du modèle. Cela m'a troublé. –
@ strelok.ndv regardez dans ce lien, vous verrez une image et comment délégué est nécessaire pour communiquer entre la vue QML et le modèle .. http://doc.qt.io/qt-5/qtquick-modelviewsdata-modelview.html – Naidu
Mis à jour la réponse aussi .. – Naidu