В этом сообщении @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
), программа не запустится.
itemAt()
в настоящее время является наиболее подходящим способом поиска макетов? - person   schedule 21.05.2021