How to find all visible deeply nested ListView items?

浪子不回头ぞ 提交于 2020-01-15 09:53:34

问题


Im working on a squish based test and try to get decent (visible) items from a QML ListView that are deeply nested that i just can't pick due to its dynamic behavior

I've get the list itself by using waitForObject with a object map name

There are several nested items in the list an i want to get all occurrences of the MyTypeCCC_QMLTYPE_72 when property visible is true

I've dumped my current class/property child-hierachy:

MyTypeAAA_QMLTYPE_195
  children[0] QQuickItem
    children[0] QQuickColumn
      children[0] MyTypeBBB_QMLTYPE_189
        children[0] MyTypeCCC_QMLTYPE_7 visible(true)

I've found this in the Squish-KB: https://kb.froglogic.com/display/KB/Example+-+Finding+child+objects+by+type+and+property+values

so i can write my own search code traversing the tree etc. but i think that could(should) be an easier solution?

  • can i rely on the exact hierarchy? (but what i the UI design changed another time)
  • i could maybe add ids to the MyTypeCCC_... if that helps
  • I've got several of this list with different types/nesting and i hope to find a easy solution that works for all/many of the case

any ideas?


回答1:


ListView is a subclass of Flickable and all its delegates are immediate children of ContentItem, you can safely iterate over its children to get all list items, but be aware that not all of its children are list delegates, so you have to filter them, e.g. by type. To find nested elements just search for them inside list item, i.e. use list item as a container. To create container locator you can use its coordinates (these are coordinates within the list, so they will be unique). Code may look like this:

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'}))


来源:https://stackoverflow.com/questions/57492076/how-to-find-all-visible-deeply-nested-listview-items

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!