Como encontrar widgets de um determinado tipo em um QLayout?
Eu sou capaz de encontrar oQRadioButton
deste jeito:
for(int i = 0; i < ui->verticalLayout->count(); i++)
{
QRadioButton* r = qobject_cast<QRadioButton*>(ui->verticalLayout->itemAt(i)->widget());
if(r->isChecked())
//found it!
}
Mas não gosto dessa maneira de iterar sobre elementos e gostaria de usar oforeach
construir. Minha primeira tentativa falha:
foreach(QRadioButton* child, ui->verticalLayout->findChildren<QRadioButton*>())
{
if(child->isChecked())
//found it!
}
O problema é que oui->verticalLayout->findChildren<QRadioButton*>()
retorna zero elementos. Também não retorna elementos comfindChildren<QObject*>()
. Alguém por favor pode explicar esse comportamento?
Nota: o título deesta A pergunta é quase idêntica à minha, mas está relacionada ao python Qt e não contém nenhuma informação útil para mim.
Filhos vs elementos?Experimentalmente, achei queui->verticalLayout->children().count()
retorna zero onde, comoui->verticalLayout->count()
retorna o número de elementos que tenho noverticalLayout
. Isso implica queitemAt(i)
efindChild<QRadioButton*>()
não acesse a mesma lista. Examinando a documentação do Qt emchildren()
não me ajudou.
Alguém pode me indicar um bom material sobre os conceitos de pais filhos do Qt? Estou assumindo que isso não tem nada a ver com acessar objetos aninhados, que é o que estou tentando realizar.
EditarConforme sugerido por Kuba Ober, as respostas paraessa questão contém informações valiosas sobre outro tópico, enquanto sua resposta esclarece minha pergunta sobre filhos de layout. Portanto, essa não é uma pergunta duplicada.