QObject* a;
QObject* b;
//a and b are created somewhere else
bool existed = b.contains(a);//check if b contains a recursively
我想知道是否存在对此的任何API?
答案 0 :(得分:4)
为此,您可以使用不带任何参数的QObject::findChildren
:
类似这样的东西:
bool exists = b->findChildren<QObject*>().contains(a);
请注意,我认为您需要这样做的事实可能意味着设计错误,因此您应该重新考虑您要完成的工作,而不必采取这种措施。很有可能这是无法完成的,但不要只是继续做这种事情,因为这很丑陋,如果您从一开始就依赖它,它会变得非常缓慢。
答案 1 :(得分:2)
与其询问“'a'是'b'的后代吗?”尝试将其转过来并询问“ b是a的祖先吗?”。然后,只需重复调用QObject::parent
。像(未经测试的)...
bool is_ancestor_of (const QObject *descendant, const QObject *ancestor)
{
if (!ancestor)
return false;
while (descendant) {
if (descendant == ancestor)
return true;
descendant = descendant->parent();
}
return false;
}