Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Конструктор, QTimer::singleShot, виртуальные методы...

Автор: hoRUS 12.8.2011, 13:10

Приветствую всех!

Понятно, что вызывать виртуальные функции из конструктора суперкласса с целью инициализировать объект подкласса каким-то специфичным для него образом просто так нельзя, но иногда очень хочется сделать что-то подобное, чтобы не индусить код лишней копипастой :rolleyes: . Возникает вопрос, можно ли как-то это надежно и безопасно сделать средствами Qt. Например, можно использовать в конструкторе

QTimer::singleShot(0, this, SLOT(initInstance()));


, где initInstance() - какой-то слот, в котором вызываются виртуальные функции?
И дополнительно, я так понимаю, после создания экземпляра объекта нужно говорить что-то вроде QCoreApplication::processEvents() .
Насколько такие действия правомерны, нет ли там скрытых (или не скрытых) граблей?
Спасибо.

Автор: Litkevich Yuriy 12.8.2011, 18:12

Цитата(hoRUS @ 12.8.2011, 16:10) *
И дополнительно, я так понимаю, после создания экземпляра объекта нужно говорить что-то вроде QCoreApplication::processEvents() .
нет не нужно, если конечно после конструктора у тебя в длительном цикле программа не находится.

Цитата(hoRUS @ 12.8.2011, 16:10) *
Насколько такие действия правомерны, нет ли там скрытых (или не скрытых) граблей?
это обычная работа таймера.

Автор: PAFOS 19.8.2011, 8:06

Есть на это функция QMetaObject::invokeMethod() (см. подробности в документации)

Очень полезная функция, надо признать...

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)