¿Cómo encontrar widgets de un tipo dado en un QLayout?

Soy capaz de encontrar elQRadioButton de esta manera:

for(int i = 0; i < ui->verticalLayout->count(); i++)
{
    QRadioButton* r = qobject_cast<QRadioButton*>(ui->verticalLayout->itemAt(i)->widget());
    if(r->isChecked())
        //found it!
}

Pero no me gusta esta forma de iterar sobre elementos y me gustaría usar elforeach construir. Mi primer intento falla:

foreach(QRadioButton* child, ui->verticalLayout->findChildren<QRadioButton*>())
{
    if(child->isChecked())
        //found it!
}

El problema es que elui->verticalLayout->findChildren<QRadioButton*>() devuelve cero elementos Tampoco devuelve elementos confindChildren<QObject*>(). ¿Alguien puede explicar este comportamiento?

Nota: el titulo deesta La pregunta es casi idéntica a la mía, pero está relacionada con Python Qt y no contiene ninguna información útil para mí.

¿Niños vs elementos?

Experimentalmente supuse queui->verticalLayout->children().count() devuelve cero donde comoui->verticalLayout->count() devuelve el número de elementos que tengo en elverticalLayout. Esto implica queitemAt(i) yfindChild<QRadioButton*>() No acceda a la misma lista. Mirando la documentación de Qt enchildren() no me ayudo

¿Alguien puede señalarme un buen material sobre los conceptos de padres e hijos de Qt? Supongo que esto no tiene nada que ver con acceder a objetos anidados, que es lo que estoy tratando de lograr.

Editar

Según lo sugerido por Kuba Ober, las respuestas aesta pregunta contiene información valiosa sobre otro tema, mientras que su respuesta aclara mi pregunta sobre los niños del diseño. Por lo tanto, esta no es una pregunta duplicada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta