QML PathView 中的 SetRootIndex
Posted
技术标签:
【中文标题】QML PathView 中的 SetRootIndex【英文标题】:SetRootIndex in QML PathView 【发布时间】:2014-12-25 15:55:31 【问题描述】:我正在使用 QML PathView
来展示我的模型。这样的模型继承自QStandardItemModel
,具有两级数据(父项和子项)。我需要在 PathView 中显示模型的第二级,即选定父级的所有子级。使用QAbstractItemView
这个结果可以通过使用setRootIndex
函数来实现。如何使用PathView
获得相同的结果?
有人可以帮助我吗? 提前致谢。
这里是一个模型示例:
newPetModel::newPetModel()
...
fillModel();
...
void newPetModel::fillModel()
QStandardItem* rootItem = invisibleRootItem();
// groups
QStandardItem* GroupAnimals = new QStandardItem();
rootItem->setChild(rootItem->rowCount(), GroupAnimals);
GroupAnimals->setData(QString("Animals"),nameRole);
QStandardItem* GroupPlants = new QStandardItem();
rootItem->setChild(rootItem->rowCount(), GroupPlants);
GroupPlants->setData(QString("Plants"),nameRole);
QStandardItem* GroupInsects = new QStandardItem();
rootItem->setChild(rootItem->rowCount(), GroupInsects);
GroupInsects->setData(QString("Insects"),nameRole);
// items
QStandardItem* Cat = new QStandardItem();
GroupAnimals->setChild(GroupAnimals->rowCount(), Cat);
Cat->setData(QString("Cat"),nameRole);
Cat->setData(QString("qrc:/cat.jpg"),imgRole);
QStandardItem* Dog = new QStandardItem();
GroupAnimals->setChild(GroupAnimals->rowCount(), Dog);
Dog->setData(QString("Dog"),nameRole);
Dog->setData("qrc:/dog.jpg",imgRole);`enter code here`
//-----
QStandardItem* Peas = new QStandardItem();
GroupPlants->setChild(GroupPlants->rowCount(), Peas);
Peas->setData(QString("Peas"),nameRole);
Peas->setData("qrc:/peas.jpg",imgRole);
//-----
QStandardItem* Spider = new QStandardItem();
GroupInsects->setChild(GroupInsects->rowCount(), Spider);
Spider->setData(QString("Spider"),nameRole);
Spider->setData("qrc:/peas.jpg",imgRole);
QStandardItem* Fly = new QStandardItem();
GroupInsects->setChild(GroupInsects->rowCount(), Fly);
Fly->setData(QString("Fly"),nameRole);
Fly->setData("qrc:/fly.jpg",imgRole);
【问题讨论】:
首先,您的模型在 QML 中可用吗?您是否已将其添加为上下文属性? 通过函数 setContextProperty 将模型添加为上下文属性,并设置 PathView 的模型属性。 PathView 显示第一级项目。 【参考方案1】:QML 适用于列表模型,正如您在您的案例中看到的那样。但是,使用DelegateModel
可以轻松克服此限制。引用文档:
通常不需要创建 DelegateModel。但是,当 QAbstractItemModel 子类用作模型时,它对于操作和访问 modelIndex 很有用。此外,DelegateModel 与 Package 一起用于为多个视图提供代理,并与 DelegateModelGroup 一起用于对代理项进行排序和过滤。
这种 QML 类型有一个属性rootIndex
。再次引用文档:
QAbstractItemModel 提供了一个层次结构的数据树,而 QML 只对列表数据进行操作。 rootIndex 允许此模型提供 QAbstractItemModel 中任何节点的子节点。
这是您需要设置(和重置)的属性,如链接文档的示例中所述。请注意,使用 DelegateModel
时不应定义 PathView
中的委托。一个工作示例 (visualdatamodel/slideshow.qml
) 在路径下的标准框架分发中可用:
Qt/QtXXX/Examples/Qt-5.4/quick/views
最后请注意,DelegateModel
和 VisualDataModel
经常以可互换的方式使用,因为
由于兼容性原因,此类型(VisualDataModel)由 Qt QML 模块提供。 相同的实现现在主要用作 Qt QML 模型中的 DelegateModel 模块。
【讨论】:
DelegateModel 是我需要的。谢谢!对不起我的英语 没问题。查找我的编辑...我记得标准框架分发中有一个示例。这应该可以澄清任何(可能的)疑问。以上是关于QML PathView 中的 SetRootIndex的主要内容,如果未能解决你的问题,请参考以下文章
QML PathView:通过鼠标滚轮更改路径视图的当前索引