Как найти виджеты заданного типа в QLayout?
Я могу найтиQRadioButton
сюда:
for(int i = 0; i < ui->verticalLayout->count(); i++)
{
QRadioButton* r = qobject_cast<QRadioButton*>(ui->verticalLayout->itemAt(i)->widget());
if(r->isChecked())
//found it!
}
Но мне не нравится этот способ перебора элементов, и я хотел бы использоватьforeach
построить. Моя первая попытка не удалась:
foreach(QRadioButton* child, ui->verticalLayout->findChildren<QRadioButton*>())
{
if(child->isChecked())
//found it!
}
Проблема в том, чтоui->verticalLayout->findChildren<QRadioButton*>()
возвращает ноль элементов. Он также не возвращает элементов сfindChildren<QObject*>()
, Может кто-нибудь объяснить, пожалуйста, это поведение?
Замечания: названиеэтот Вопрос почти идентичен моему, но он связан с Python Qt и не содержит никакой полезной информации для меня.
Дети против стихий?Экспериментально я понял, чтоui->verticalLayout->children().count()
возвращает ноль, где какui->verticalLayout->count()
возвращает количество элементов, которые у меня есть вverticalLayout
, Это подразумевает, чтоitemAt(i)
а такжеfindChild<QRadioButton*>()
не получить доступ к тому же списку. Глядя на документацию Qt поchildren()
не помог мне.
Может ли кто-нибудь указать мне хороший материал о концепциях дочерних родителей Qt? Я предполагаю, что это не имеет ничего общего с доступом к вложенным объектам, чего я и пытаюсь достичь.
редактироватьПо предложению Кубы Обер, ответы наэтот вопрос содержит ценную информацию по другой теме, тогда как его ответ проясняет мой вопрос о детях верстки. Таким образом, это не повторяющийся вопрос.