crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Опрос формы о child-ах с контейнерами, QTabWidget && e t c
JohnZ
  опции профиля:
сообщение 23.9.2014, 15:11
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 131
Регистрация: 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


Участник
**

Группа: Участник
Сообщений: 131
Регистрация: 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


Участник
**

Группа: Участник
Сообщений: 131
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 10 раз(а)




Репутация:   0  


Цитата(lanz @ 23.9.2014, 19:12) *
Теоретически любой объект может быть контейнером, поэтому вам просто нужно рекурсивно опрашивать всех детей.

КанЭшна может, но вотЪ признака, типа bool isContainer() к сожалению почему-то не имеет.
Ведь кучу текста можно было-бы сэкономить :-( Видимо придётся допиливать либу :-)
Я предполагал, что кто-либо уже сталкивался с контейнерами, и опрашивал их по-иному, а не по имени ...

Цитата(lanz @ 23.9.2014, 19:12) *
Так или иначе вам придется спрашивать имя, чтобы отделить например Layout'ы.

Дык пока так и делаю, но хотелось сделать более универсальное решение ...

Цитата(lanz @ 23.9.2014, 19:12) *
Но ничего плохого в этом не вижу .) Вы же получаете 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


Участник
**

Группа: Участник
Сообщений: 131
Регистрация: 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


Участник
**

Группа: Участник
Сообщений: 131
Регистрация: 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  


Только рекурсивно опрашивать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 9.12.2019, 8:52