Опрос формы о child-ах с контейнерами, QTabWidget && e t c |
Здравствуйте, гость ( Вход | Регистрация )
Опрос формы о child-ах с контейнерами, QTabWidget && e t c |
JohnZ |
23.9.2014, 15:11
Сообщение
#1
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Всем Здравствовать !
После создания динамической формы, ( http://www.forum.crossplatform.ru/index.php?showtopic=10120 ) возникла проблема её опроса на предмет child-ов и их динамич-х св-в. QObjectList ol = formUI->children(); for (i = 0;i < ol.count();i++) qDebug() << ol.at(i)->dynamicPropertyNames(); В том случае, если на форме только "простые" элементы, как то QLabel, QLineEdit и т д, проблем нет, но в случае если есть что-то типа QTabWidget, т.е. контейнер, в список child-ов ес-сно попадает только он. О том, где можно опросить child-а что он контейнер, я не нашёл, разве-что по имени, что не совсем кузяво, т.к. в Дизайнере это имя может быть изменено ("tabWidget" , "tabWidget_2" "tabWidget_4" ... ). Вопрос в том, можно-ли получить всех child-ов на форме, невзирая на контейнеры одним вызовом, как это сделано выше, либо определить что он контейнер, но не по имени ??? |
|
|
OKTA |
23.9.2014, 16:48
Сообщение
#2
|
Студент Группа: Участник Сообщений: 29 Регистрация: 4.6.2014 Пользователь №: 4155 Спасибо сказали: 2 раз(а) Репутация: 0 |
Хм, может я что-то не допонял, но что мешает пройтись с помощью const QObjectList & QObject::children () const?
|
|
|
JohnZ |
23.9.2014, 18:21
Сообщение
#3
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Пока так и делаю, но это не то решение что нужно, а мешает
("tabWidget" , "tabWidget_2" "tabWidget_4" ... ) и невозможность определить контейнер. В диалоге с tabWidget-ом, всего 1 child, - tabWidget_XXX :-( Все остальные child-ы на нём ... А если на одной из вкладок будет ещё один tabWidget_ХХХ или QToolBox ? Что тогда делать ? |
|
|
lanz |
23.9.2014, 19:12
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Теоретически любой объект может быть контейнером, поэтому вам просто нужно рекурсивно опрашивать всех детей.
Так или иначе вам придется спрашивать имя, чтобы отделить например Layout'ы. Но ничего плохого в этом не вижу .) Вы же получаете dynamicPropertyNames. |
|
|
JohnZ |
24.9.2014, 0:11
Сообщение
#5
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Теоретически любой объект может быть контейнером, поэтому вам просто нужно рекурсивно опрашивать всех детей. КанЭшна может, но вотЪ признака, типа bool isContainer() к сожалению почему-то не имеет. Ведь кучу текста можно было-бы сэкономить :-( Видимо придётся допиливать либу :-) Я предполагал, что кто-либо уже сталкивался с контейнерами, и опрашивал их по-иному, а не по имени ... Так или иначе вам придется спрашивать имя, чтобы отделить например Layout'ы. Дык пока так и делаю, но хотелось сделать более универсальное решение ... Но ничего плохого в этом не вижу .) Вы же получаете dynamicPropertyNames. Да, т.к. исходя именно из dynamicProperty, и строится дальнейший алгоритм ... |
|
|
OKTA |
24.9.2014, 9:58
Сообщение
#6
|
Студент Группа: Участник Сообщений: 29 Регистрация: 4.6.2014 Пользователь №: 4155 Спасибо сказали: 2 раз(а) Репутация: 0 |
А что насчет этого? bool QObject::isWidgetType () const
|
|
|
JohnZ |
24.9.2014, 10:52
Сообщение
#7
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
К сожалению не подходит, т.к. он отвечает о Widget-е а не контейнере ...
|
|
|
OKTA |
24.9.2014, 10:58
Сообщение
#8
|
Студент Группа: Участник Сообщений: 29 Регистрация: 4.6.2014 Пользователь №: 4155 Спасибо сказали: 2 раз(а) Репутация: 0 |
Ну так, layout не является виджетом и таким образом ты их отсеешь.
|
|
|
JohnZ |
24.9.2014, 11:04
Сообщение
#9
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Дык мне нужно, как указано в 1-й месаге ветки, определить Контейнеры,
для их дальнейшего пока не-рекурсивного опроса на предмет содержащихся в них Widget-ов и их динамич-х св-в. Делается всё в цикле, и поэтому он уж слишком громоздким получается ... Сообщение отредактировал JohnZ - 24.9.2014, 11:07 |
|
|
OKTA |
24.9.2014, 11:08
Сообщение
#10
|
Студент Группа: Участник Сообщений: 29 Регистрация: 4.6.2014 Пользователь №: 4155 Спасибо сказали: 2 раз(а) Репутация: 0 |
Только рекурсивно опрашивать
|
|
|
Текстовая версия | Сейчас: 29.3.2024, 10:01 |