SetRootIndex in QML PathView
SetRootIndex in QML PathView
我正在使用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 适用于列表模型,正如您在案例中看到的那样。但是,通过使用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提供。
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从C++更改 QML 图像源
- QML TableView 使用 QtQuick.Controls 2 单击行
- 如何多次询问来自QML对话框的输入?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 阅读 QML 中结构C++ QVector 的 QVector
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- SetRootIndex in QML PathView