【问题标题】:Accessing listview index in an extensible QML application在可扩展的 QML 应用程序中访问列表视图索引
【发布时间】: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

【问题讨论】:

    标签: javascript qt qml


    【解决方案1】:

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

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

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

    property var index: null
    

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

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多