Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.21.248.119] |
|
Сообщ.
#1
,
|
|
|
Есть gridLayout, в нем verticalLayout'ы, а в нем - horizontalLayuot'ы с чекбоксами. Не могу привести код, но у меня возвращает 0, если использовать findChildren gridLayout'а.
Как создать коллекцию всех-всех чекбоксов в gridLayout, независимо от количества промежуточных родителей? При условии, что и количество, и вложенность лайоутов внутри изменчиво. |
Сообщ.
#2
,
|
|
|
Все лайауты имеют свои лайаут-айтемы. Которые могут быть как лайауты, так и виджеты.
Количество их можно узнать по: int QLayout::count() const Перебрать можно в цикле по индексу, используя: QLayoutItem *QLayout::itemAt(int index) const Для того, чтобы понять, что перебираемый элемент лайаут или чекбокс, используем: const char *QMetaObject::className() const |
Сообщ.
#3
,
|
|
|
Цитата JoeUser @ Существует ли готовый код? Не хочу изобретать велосипед. А можно ли проще: получить все элементы формы - и потом из них просто чекбоксы выдергивать? |
Сообщ.
#4
,
|
|
|
Цитата Сергей85 @ А можно ли проще: получить все элементы формы - и потом из них просто чекбоксы выдергивать? Можно. Просто забей на дизайнер и конструируй форму в конструкторе или методах позже. В классе формы заведи поле QMap<QString, QWidget*>. Как только создал элемент управления - "регистрируй" его в этом поле. Ну а дальше ... в любой момент имеешь доступ к любому полю. Плюс к тому - в деструкторе сможешь грамотно разрушить объекты, созданные в хипе. Встроенных "списков" элементов управления формы - нет такого в Qt, ибо построение формы идет в виде дерева контейнеров, содержащих вложенные контейнеры и/или элементы управления. |
Сообщ.
#5
,
|
|
|
Решил иначе. Использование фреймов, а в фрейме - столько лайоутов, сколько нужно именно для выравнивания элементов.
В случае с формой FindChildren вернет абсолютно все элементы, в случае с фреймом - только элементы фрейма. |