xml - 如何从 XMLListModel 中的属性在动态组件中创建动态和不同的对象?
问题描述
我从文件 Page.qml 动态创建了一个页面,这没问题。在这个文件中,我有一个 XMLListModel,它从这个 XML 文件中获取标签。
元素.xml
<element>First
<type>Video</type>
<source>videos.mp4<source>
</element>
<element>Second
<type>Image</type>
<source>image.jpg</source>
</element>
页面.qml
...
Page
{
XMLListModel
{
id:xmlmodel
source:"elements.xml"
query:"/element"
XmlRole
{
name:"type"; query:"type/string()"
}
XmlRole
{
name:"source"; query:"type/source()"
}
...}
我想在 javascript 中创建一个函数,其中:
- 我可以像参数一样传递 XmlListModel 类型和来源;
- 在相对 qml 文件(videos.qml、image.qml)和源之间选择类型 qml 创建对象以像属性一样添加
- 如果可能的话,我想把这些对象放在 GridView 中。但我不知道该怎么做。
解决方案
您可以将xmlmodel分配给GridView 的模型属性。
从video.qml和image.qml创建组件对象,它们将用作代表。添加了一个额外的组件 (compPlaceHolder) 用于处理错误类型。
Component{ id: compVideo; Videos{}}
Component{ id: compImage; id: Image{}}
Component{ id: compPlaceHolder; id: Item{}}
对于 GridView 的委托,您可以使用 Loader 组件,该组件将根据模型中的 'type' 属性动态加载组件compVideo、compImage或compPlaceHolder 。
Loader{
sourceComponent: assignDel()
function assignDel(){
if(type == "Video"){ return compVideo; }
else if(type == "Image"){ return compImage; }
else{ return compPlaceHolder; }
}
}
推荐阅读
- scipy-optimize - 在 scipy.root 中使用 LinearOperator 作为雅可比行列式
- python - 为什么我们必须在使用 boto3 客户端而不是在资源中指定属性类型?
- javascript - 了解嵌套条件(三元)运算符
- cmd - 以管理员身份执行 .BAt 文件
- excel - 达到特定值后如何在excel中重新开始计数
- javascript - 使用 PHP 或 JS 将存储的服务器时间转换为本地时间
- reactjs - 如何将类应用于不支持 className 的外部组件?
- plsql - 将 plsql 嵌套表类型与另一个常规 sql 表连接
- c++ - 从进程转储中读取内存(自动分析)
- reactjs - 将 Header 或 Title 渲染到 ant design - Timepicker 组件