在可扩展的QML应用程序中访问listview索引

时间:2015-03-01 21:57:08

标签: javascript qt qml

我正在做一个可扩展的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

1 个答案:

答案 0 :(得分:1)

解决方案比我预期的简单。 最好的方法似乎是在创建组件时将索引作为参数发送。 在我的情况下,电话成了:

Extensions.createExtensionComponent("taskRow.qml", row, {"model":tasksModel.get(index), "index": index});

在我的插件组件中,我创建了一个名为index的属性,如下所示:

property var index: null

现在在我的扩展函数中,我期望一个具有可变数量属性的对象,并在创建qml元素时设置它。