QML 树视图是否支持信号布局已更改从模型发出的信号



我有一个与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
{
    model: treeModel
    TableViewColumn 
    {
        title: "Title"
        role: "title"
        width: 700
    }
}

我做错了什么?为什么视图在排序后不更新元素的布局?

我认为您需要委派树视图项目。数据提供给委托。

尝试通过添加 itemDelegate 更改 QML 树视图,如下所示

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

委托 - 指示数据在视图中的显示方式。这 委托获取模型中的每个数据并将其封装。数据是 可通过委托访问。

相关内容

  • 没有找到相关文章

最新更新