feat: implement findChild* methods

This commit is contained in:
2026-09-30 15:01:28 +02:00
parent 57a6e48dcb
commit bc927b16af
+68
View File
@@ -214,6 +214,74 @@ QString ZUtils::enumToString(
return QString::fromUtf8(key); return QString::fromUtf8(key);
} }
namespace {
template <typename Predicate>
QQuickItem* findChildDfs(QQuickItem* root, Predicate&& match) {
const auto children = root->childItems();
for (QQuickItem* const child : children) {
if (match(child)) {
return child;
}
if (QQuickItem* const found = findChildDfs(child, match)) {
return found;
}
}
return nullptr;
}
template <typename Predicate>
void findChildrenDfs(
QQuickItem* root, Predicate&& match, QList<QQuickItem*>& out) {
const auto children = root->childItems();
for (QQuickItem* const child : children) {
if (match(child)) {
out.append(child);
}
findChildrenDfs(child, match, out);
}
}
} // namespace
QQuickItem* ZUtils::findChild(QQuickItem* root, const QString& name) {
if (!root) {
return nullptr;
}
return findChildDfs(root, [&name](const QQuickItem* item) {
return item->objectName() == name;
});
}
QList<QQuickItem*> ZUtils::findChildren(QQuickItem* root, const QString& name) {
QList<QQuickItem*> children;
if (root) {
findChildrenDfs(
root,
[&name](const QQuickItem* item) {
return item->objectName() == name;
},
children);
}
return children;
}
QList<QQuickItem*> ZUtils::findChildrenMatching(
QQuickItem* root, const QString& pattern) {
QList<QQuickItem*> children;
if (root) {
const QRegularExpression re(pattern);
findChildrenDfs(
root,
[&re](const QQuickItem* item) {
return re.match(item->objectName()).hasMatch();
},
children);
}
return children;
}
#ifndef ZSHELL_VERSION #ifndef ZSHELL_VERSION
#define ZSHELL_VERSION "" #define ZSHELL_VERSION ""
#endif #endif