Russian Qt Forum

Qt => Общие вопросы => Тема начата: baka от Декабрь 18, 2007, 08:31



Название: как родительский виджет может узнать о появлении дочерних.
Отправлено: baka от Декабрь 18, 2007, 08:31
как родительский виджет может узнать о появлении дочерних сразу после их появления.

т.е. new MyClass(this);
где this указывает на eMClientForm
должен вызываться к.либо метод eMBaseForm
он посмотрит что за обьект добавлен на форму и в определенном случае произведет определенные манипуляции.

т.е. у меня есть диалоговое окно
class eMBaseForm : public QDialog
и
class eMClientForm : public eMBaseForm

в конструкторе eMClientForm я набрасываю компонентов
типа :
(class eMMyFieldEditor : public QWidget, public eMAbstractFieldEditor; )
и хочу чтобы при добавлении каждого вызывался некий метод определенный в eMBaseForm

извините что так путанно

т.е.
у меня сейчас конструктор формы вот такой
Код:
eMForeignIDFieldEditor * fid_group = new eMForeignIDFieldEditor(tr("Группа"),"group_client","group_id",this);
eMForeignIDFieldEditor * fid_surname = new eMForeignIDFieldEditor(tr("Фамилия"),"surname","surname_id",this);
eMForeignIDFieldEditor * fid_name = new eMForeignIDFieldEditor(tr("Имя"),"name","name_id",this);
eMForeignIDFieldEditor * fid_patronymic = new eMForeignIDFieldEditor(tr("Отчество"),"patronymic","patronymic_id",this);
eMForeignIDFieldEditor * fid_family_status = new eMForeignIDFieldEditor(tr("Семейное положение"),"family_status","family_status_id",this);

eMTextFieldEditor * tfe_phone = new eMTextFieldEditor(tr("Телефон"),"phone",this);
eMTextFieldEditor * tfe_phone_home = new eMTextFieldEditor(tr("Домашний телефон"),"phone_home",this);
eMTextFieldEditor * tfe_email = new eMTextFieldEditor(tr("email "),"email",this);
eMTextFieldEditor * tfe_work = new eMTextFieldEditor(tr("Место работы"),"work",this);
eMTextFieldEditor * tfe_post = new eMTextFieldEditor(tr("Должность"),"post",this);

eMTextFieldEditor * tfe_address_text = new eMTextFieldEditor(tr("Адрес"),"address_text",this);

component_vector.append(lc);
component_vector.append(fid_group);
component_vector.append(fid_surname);
component_vector.append(fid_name);
component_vector.append(fid_patronymic);
component_vector.append(fid_family_status);
component_vector.append(tfe_phone);
component_vector.append(tfe_phone_home);
component_vector.append(tfe_email);
component_vector.append(tfe_work);
component_vector.append(tfe_post);
component_vector.append(tfe_address_text);


QVBoxLayout * main = new QVBoxLayout(this);
main->addWidget(fid_group);
main->addWidget(fid_surname);
main->addWidget(fid_name);
main->addWidget(fid_patronymic);
main->addWidget(tfe_phone);
main->addWidget(tfe_phone_home);
main->addWidget(tfe_email);
main->addWidget(tfe_work);
main->addWidget(tfe_post);
main->addWidget(fid_family_status);
main->addWidget(lc);
main->addWidget(tfe_address_text);

я хочу чтобы тело конструктора выглядело бы так :

Код:
	QVBoxLayout * main = new QVBoxLayout(this);
main->addWidget(new eMForeignIDFieldEditor(tr("Группа"),"group_client","group_id",this);
main->addWidget( new eMForeignIDFieldEditor(tr("Фамилия"),"surname","surname_id",this);
main->addWidget(new eMForeignIDFieldEditor(tr("Имя"),"name","name_id",this);
main->addWidget(new eMForeignIDFieldEditor(tr("Отчество"),"patronymic","patronymic_id",this);
main->addWidget(new eMForeignIDFieldEditor(tr("Семейное положение"),"family_status","family_status_id",this);
main->addWidget(new eMTextFieldEditor(tr("Телефон"),"phone",this);
main->addWidget(new eMTextFieldEditor(tr("Домашний телефон"),"phone_home",this);
main->addWidget(new eMTextFieldEditor(tr("email "),"email",this);
main->addWidget(new eMTextFieldEditor(tr("Место работы"),"work",this);
main->addWidget(new eMTextFieldEditor(tr("Должность"),"post",this);
main->addWidget(new eMTextFieldEditor(tr("Адрес"),"address_text",this);

как этого добится ???


Название: Re: как родительский виджет может узнать о появлении дочерних.
Отправлено: Sergeich от Декабрь 18, 2007, 11:20
http://doc.trolltech.com/4.3/qchildevent.html


Название: Re: как родительский виджет может узнать о появлении дочерних.
Отправлено: baka от Декабрь 18, 2007, 13:58
спасибо.
я сам не догадался в сторону event'ов глянуть.


Название: Re: как родительский виджет может узнать о появлении дочерних.
Отправлено: ритт от Декабрь 18, 2007, 18:33
буквально часа три назад делал скрытие детей лэйоута через отлов чайлдивент::адд() :)
сергеич опередил :)

бака, почему такой код страшный? :)
сделай листвиджет или мап<стринг, виджет>, что ли?


Название: Re: как родительский виджет может узнать о появлении дочерних.
Отправлено: baka от Декабрь 19, 2007, 05:49
пределал на QList<eMAbstractFieldEditor*> ;