Qml 如何查找所有可见的深度嵌套ListView项?

Qml 如何查找所有可见的深度嵌套ListView项?,qml,squish,Qml,Squish,我正在进行一个基于挤压的测试,并试图从一个QML ListView中获取一些合适的(可见的)项目,这些项目嵌套得很深,由于其动态行为,我无法选择 我使用带有对象映射名的waitForObject来获取列表本身 列表中有几个嵌套项,我想在属性visible为true时获取所有出现的MyTypeCCC\u QMLTYPE\u 72 我已放弃当前的类/属性子层次结构: MyTypeAAA_QMLTYPE_195 children[0] QQuickItem children[0] QQui

我正在进行一个基于挤压的测试,并试图从一个QML ListView中获取一些合适的(可见的)项目,这些项目嵌套得很深,由于其动态行为,我无法选择

我使用带有对象映射名的waitForObject来获取列表本身

列表中有几个嵌套项,我想在属性visible为true时获取所有出现的
MyTypeCCC\u QMLTYPE\u 72

我已放弃当前的类/属性子层次结构:

MyTypeAAA_QMLTYPE_195
  children[0] QQuickItem
    children[0] QQuickColumn
      children[0] MyTypeBBB_QMLTYPE_189
        children[0] MyTypeCCC_QMLTYPE_7 visible(true)
我在Squish KB中找到了以下内容:

因此,我可以编写自己的搜索代码遍历树等,但我认为这可能(应该)是一个更简单的解决方案

  • 我可以依赖于确切的层次结构吗?(但我的UI设计又改变了一次)
  • 我可能会在
    MyTypeCCC\ucode>中添加ID。。。如果有帮助的话
  • 我有几个不同类型/嵌套的列表,我希望找到一个适用于所有/许多情况的简单解决方案

有什么想法吗?

ListView
Flickable
的一个子类,它的所有委托都是的直接子类,您可以安全地迭代它的子类以获取所有列表项,但要注意,它的子类中并非所有的都是列表委托,因此您必须对它们进行筛选,例如通过
键入
。要查找嵌套元素,只需在列表项中搜索它们,即使用列表项作为容器。要创建容器定位器,可以使用其坐标(这些坐标在列表中,因此它们是唯一的)。代码可能如下所示:

list_view = findObject(list_locator)
nested = []
for i in range(list_view.contentItem.children.count):
    item = list_view.contentItem.children.at(i)
    if className(item) == 'MyTypeAAA':
        netsed.append(findObject({'container': {'x': item.x, 'y': item.y, 'type': className(item)}, 'type': 'MyTypeCCC'}))

ListView
Flickable
的一个子类,它的所有委托都是的直接子类,您可以安全地迭代它的子类以获取所有列表项,但请注意,并非它的子类的所有
都是列表委托,因此您必须对它们进行筛选,例如通过
类型
。要查找嵌套元素,只需在列表项中搜索它们,即使用列表项作为容器。要创建容器定位器,可以使用其坐标(这些坐标在列表中,因此它们是唯一的)。代码可能如下所示:

list_view = findObject(list_locator)
nested = []
for i in range(list_view.contentItem.children.count):
    item = list_view.contentItem.children.at(i)
    if className(item) == 'MyTypeAAA':
        netsed.append(findObject({'container': {'x': item.x, 'y': item.y, 'type': className(item)}, 'type': 'MyTypeCCC'}))

那么,对于具有深度嵌套项的非ListView项呢?是否有某种过滤功能(类似XPath之类的功能?),或者我是否需要沿着子层次结构向下移动,自己查找想要的内容?@llm没有通用的解决方案,但通常不需要遍历整个树,取而代之的是,只需使用一个最顶部的容器,其中您要查找的元素是唯一的,并在其中进行搜索。另外,如果您不关心结构,只想获取具有特定属性的所有元素,请使用
findAllObjects
,返回所有匹配的元素,而不管它们在对象树中的位置如何。对于具有深度嵌套项的非ListView项,是否有某种过滤功能(类似XPath或其他功能)或者我需要沿着子层次结构向下移动,自己查找想要的内容吗?@llm没有通用的解决方案,但通常不需要遍历整个树,而只需要使用最顶层的容器,在其中查找唯一的元素并在其中搜索。另外,如果您不关心结构,只想获取具有特定属性的所有元素,请使用
findAllObjects
返回所有匹配元素,而不管它们在对象树中的位置如何。