我有一个适用于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
}
}
我做错了什么?为什么视图在排序后不会更新元素的布局?
答案 0 :(得分:0)
我认为你需要委托树视图项。数据提供给代表。
尝试通过添加 itemDelegate
来更改您的QML TreeView ,如下所示TreeView
{
model: treeModel
itemDelegate: Item {
Text {
color: styleData.textColor
text: styleData.value
}
}
TableViewColumn
{
title: "Title"
role: "title"
width: 700
}
}
查看以下链接,了解委托在模型和QML视图之间的重要性。有一个图像很容易解释。
http://doc.qt.io/qt-5/qtquick-modelviewsdata-modelview.html
委托 - 指示数据应如何在视图中显示。该 delegate获取模型中的每个数据并封装它。数据是 通过代表可以访问。