我正在做一个可扩展的QML应用程序,这意味着根据应用程序上加载的“插件”加载了一些组件。
其中一种情况如下。
我有一个ListView,并且ListView委托上显示的一些元素是基于插件加载的。 要创建组件/对象,我使用以下函数: Qt.createComponent 和component.createObject
效果很好,我可以看到并加载了qml组件。
但是,对于某些功能,我需要从插件qml文件(在委托中加载)中更改listview索引,但索引无法从那里访问,我得到一个简单的 索引未定义 在尝试时。
代码在github上:扩展文件是这个:https://github.com/danielfranca/procrastinationkiller/blob/master/extensions/timerTasks/taskRow.qml
我需要访问索引的具体部分位于id playpause 的元素mousearea的单击信号上。
我也试过找到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
答案 0 :(得分:1)
解决方案比我预期的简单。 最好的方法似乎是在创建组件时将索引作为参数发送。 在我的情况下,电话成了:
Extensions.createExtensionComponent("taskRow.qml", row, {"model":tasksModel.get(index), "index": index});
在我的插件组件中,我创建了一个名为index的属性,如下所示:
property var index: null
现在在我的扩展函数中,我期望一个具有可变数量属性的对象,并在创建qml元素时设置它。