用QT举例,获取QWidget下所有的子孙QWidget
QList<QWidget*> getChildrens(QWidget * widget)
{
if (widget == nullptr)
{
return QList<QWidget*>();
}
QList<QWidget*> childrens; // 存放所有子孙节点
QStack<QWidget*> minorStack;
minorStack.append(widget); // 默认吧Widegt添加进去
while (!minorStack.isEmpty())
{
QWidget* minorWidget = minorStack.pop(); // 弹出栈最上层数据
// 处理最上层数据
if (minorWidget == nullptr)
{
continue;
}
// 把弹出的元素存放
if (widget != minorWidget)
{
childrens.append(minorWidget);
}
QList<QWidget*> childs = minorWidget->findChildren<QWidget*>(); // 把子节点放入栈
if (!childs.isEmpty())
{
for each (auto var in childs)
{
minorStack.append(var);
}
}
}
return childrens;
}