在可扩展的 QML 应用程序中访问列表视图索引
Posted
技术标签:
【中文标题】在可扩展的 QML 应用程序中访问列表视图索引【英文标题】:Accessing listview index in an extensible QML application 【发布时间】:2015-03-01 21:57:07 【问题描述】:我在做一个可扩展的QML应用,就是说有些组件是根据应用上加载的“插件”来加载的。
以下情况之一。
我有一个 ListView,ListView 委托上显示的一些元素是根据插件加载的。 要创建组件/对象,我使用以下函数: Qt.createComponent 和component.createObject
效果很好,我可以看到加载的 qml 组件并与之交互。
但是,对于某些功能,我需要从插件 qml 文件(加载到委托上)中更改 listview 索引,但无法从那里访问索引,我得到一个简单的 索引未定义 尝试时。
代码在github上:扩展文件是这个:https://github.com/danielfranca/procrastinationkiller/blob/master/extensions/timerTasks/taskRow.qml
我需要访问索引的具体部分是在 clicked 信号上的 id 为 playpause 的元素的鼠标区域。
我也尝试找到 ListView 元素,并使用 x、y 鼠标坐标调用函数 indexAt,但它始终返回 0。
加载组件的具体代码是这个:
Component.onCompleted:
addTaskLayout.inputObjects = Extensions.createExtensionComponent("extraInput.qml", addTaskLayout);
这个函数是这个文件中的一个javascript函数:https://github.com/danielfranca/procrastinationkiller/blob/master/extensions.js
如果您需要更多详细信息,请告诉我,我很想了解为什么 QML 不向加载的组件公开索引以及为什么即使使用 x,y 坐标也找不到索引。
我正在使用 Qt5.4、Ubuntu 14.10、Qt Creator 3.3.1
【问题讨论】:
【参考方案1】:解决方案比我预期的要简单。 最好的方法似乎是在创建组件时将索引作为参数发送。 就我而言,电话变成了:
Extensions.createExtensionComponent("taskRow.qml", row, "model":tasksModel.get(index), "index": index);
在我的插件组件中,我创建了一个名为 index 的属性,如下所示:
property var index: null
现在在我的扩展函数中,我期望一个具有可变数量属性的对象,并在创建 qml 元素时对其进行设置。
【讨论】:
以上是关于在可扩展的 QML 应用程序中访问列表视图索引的主要内容,如果未能解决你的问题,请参考以下文章
如何从 QML 中的列表视图访问 currentItem 的角色?