Russian Qt Forum

Qt => Общие вопросы => Тема начата: XandoX от Май 08, 2007, 07:39



Название: Каким образом отловить событие создания виджета.
Отправлено: XandoX от Май 08, 2007, 07:39
Сабж, и еще есть ли такое событие, которое происходит сразу после создания виджета


Название: Каким образом отловить событие создания виджета.
Отправлено: goer от Май 08, 2007, 10:03
Может можно реализовать через сигнал который будет испускаться в конструкторе класса?


Название: Каким образом отловить событие создания виджета.
Отправлено: pastor от Май 08, 2007, 10:19
>Может можно реализовать через сигнал который будет испускаться в конструкторе класса?

имхо, метод сигналов-слотов не совсем корректен, так как объект ещё не доконца создан. Глянь QChildEvent, может он чем-то поможет


Название: Каким образом отловить событие создания виджета.
Отправлено: XandoX от Май 08, 2007, 10:33
нет я разабрался. окно виджета к моменту захода в конструктор уже создано, так что в конструкторе уже сразу можно юзать само окно и его хэндл, там все впорятке


Название: Каким образом отловить событие создания виджета.
Отправлено: goer от Май 08, 2007, 11:17
Цитата: "pastor"
имхо, метод сигналов-слотов не совсем корректен, так как объект ещё не доконца создан.


На момент выполнения конструктора объекта-наследника от QObject, QObject-составлющая объекта уже создана, а следовательно и механизм сигналов-слотов уже должен работать.


Название: Каким образом отловить событие создания виджета.
Отправлено: Tonal от Май 08, 2007, 13:58
Цитата: "goer"
Цитата: "pastor"
имхо, метод сигналов-слотов не совсем корректен, так как объект ещё не доконца создан.


На момент выполнения конструктора объекта-наследника от QObject, QObject-составлющая объекта уже создана, а следовательно и механизм сигналов-слотов уже должен работать.
Сигнал-то ты послать сможешь, а вот кто его получит?
Ведь пока конструирование не закончилось, объект не виден извне...
Разве что сам, в конструкторе парента на себя законектишь... Но тут, по моему, проще всё же евентом в него броситься. ;-)
К тому же, что если объект ещё недоконструировался?


Название: Каким образом отловить событие создания виджета.
Отправлено: Kosh от Май 10, 2007, 10:11
Я вот над аналогичной проблемой раздумывала. Мысль пришла только такая:
Завести глобальный класс, что-то вроде ретранслятора.
В конструкторе коннектишся к нему и посылаешь сигнал вроде такого objectCreated(void *адресНовогоОбъекта [, тип, если нужно и пр.]).
Тот, кто хочет знать о моменте создания нового объекта уже законнектился к ретранслятору и ждет от него сигнала, аналогичного вышеописанному.
Тлько вот насколько я разобралась в механизме сигналов и слотов, слот отработает в тот момент, когда конструктор еще не будет завершен. То есть, если объект создается

my_obj = new MyObject(....);

то переменная my_obj может быть еще не проинициализирована. здесь надо быть очень осторожным. Надо на эту тему с более гуристым товарищем посоветоватья, только у него еще праздник, и боюсь, продлится он до понедельника ))).


Я попробовала, в моем случае такой вариант сработал.