【发布时间】:2017-10-20 16:31:09
【问题描述】:
我有一个与 QTreeView 配合得很好的模型。在模型中,我实现了如下所示的排序:
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);
}
当我调用这个函数时,QTreeView 会更新视图,但 QML 中的 TreeView 不会这样做。 QML TreeView 用法:
TreeView
{
model: treeModel
TableViewColumn
{
title: "Title"
role: "title"
width: 700
}
}
我做错了什么?为什么排序后视图不更新元素的布局?
【问题讨论】:
标签: qt treeview qml qabstractitemmodel