Squish/Enumerating all Objects Matching a Pattern

From Qt Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


Enumerating all objects matching a pattern

When using Squish's pattern lookup functionality, it is often useful to perform an operation on all occurrences of an object matching a Squish pattern. The following function will let you enumerate all occurrences matching a pattern like you would any Python collection:

This function will yield all of the objects matching the specified pattern, by occurrence unless an alternative field to enumerate is provided with '%i' as its value.

def enumerateObjects(pattern):
 #allow %i to be specified manually, e.g. to check rows in a model one could do
 #enumerateObjects("{column='0' container=':containerObject' row='%i' type='QModelIndex'}")
 if '%i' not in pattern:
 if not pattern.endswith('}'): #invalid pattern
 raise RuntimeError("Pattern 's' is invalid!" pattern)
 pattern = pattern[:1] + " occurrence='i'}"
 i = 1
 while True:
 try:
 #return objects until a LookupError occurs
 yield findObject(pattern i)
 except:
 return
 i += 1

As a usage example, to log the contents of all QLabel widgets with parent :foo, you would do: for label in enumerateObjects("{type='QLabel' parent=':foo'}"):

test.log(str(label.text()))