我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
最后请注意,DelegateModel并且VisualDataModel通常以可互换的方式使用
由于兼容性原因,此类型(VisualDataModel)由Qt QML模块提供.现在,相同的实现主要在Qt QML模型模块中以DelegateModel的形式提供.