gpt4 book ai didi

javascript - 在可扩展的 QML 应用程序中访问 ListView 索引

转载 作者:行者123 更新时间:2023-12-03 10:40:34 24 4
gpt4 key购买 nike

我正在做一个可扩展的QML应用程序,这意味着一些组件是根据应用程序上加载的“插件”加载的。

其中一种情况如下。

我有一个ListView,ListView委托(delegate)上显示的一些元素是根据插件加载的。为了创建组件/对象,我使用以下函数:Qt.createComponent 和 component.createObject

它工作得很好,我可以看到加载的 qml 组件并与之交互。

但是,对于某些功能,我需要从插件 qml 文件(加载在委托(delegate)上)内部更改 ListView 索引,但无法从那里访问索引,我得到一个简单的索引未定义当尝试时。

代码在github上:扩展文件是这个:https://github.com/danielfranca/procrastinationkiller/blob/master/extensions/timerTasks/taskRow.qml

我需要访问索引的具体部分是id为playpause的元素的mousearea的clicked信号。

我还尝试查找 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

最佳答案

解决方案比我想象的要简单。最好的方法似乎是在创建组件时将索引作为参数发送。在我的例子中,调用变成:

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

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

property var index: null

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

关于javascript - 在可扩展的 QML 应用程序中访问 ListView 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28799613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com