Поиск макета, зная его имя в Qt

В этом сообщении @cgmb упомянул, что:

The parent of a `QWidget` must be a `QWidget`. `QLayout` is not a `QWidget`.

Layouts exist to move and resize the children of a `QWidget`. 
Though you may add child widgets by making calls on the layout, ultimately, 
    their parent will be the `QWidget` that the layout resides on.

Например, использование findChild() для поиска QLayout вернет nullptr:

QVBoxLayout *keyLayout = inputFieldGroupBox->findChild<QVBoxLayout*>("keyBoxLayoutCea", Qt::FindChildrenRecursively);

Таким образом, я был вынужден использовать itemAt() для ручного поиска макета:

QVBoxLayout *keyLayout = dynamic_cast<QVBoxLayout*>(firstHoriField->itemAt(3)->layout());

(firstHoriField — это макет, в котором находится keyLayout, а inputFieldGroupBox — это QGroupBox, в котором находится firstHoriField)

Есть ли какой-либо эффективный/менее подверженный ошибкам метод, который можно использовать для поиска макета (зная его имя), потому что из приведенного выше кода видно, что метод itemAt() довольно грубый, и если по какой-то причине я изменить индексы (например, с 3-›2), программа не запустится.


person Community    schedule 21.05.2021    source источник
comment
Проверьте этот ответ.   -  person rbaleksandar    schedule 21.05.2021
comment
@rbaleksandar Хм, из этого я могу сделать вывод, что itemAt() в настоящее время является наиболее подходящим способом поиска макетов?   -  person    schedule 21.05.2021