crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Конструктор, QTimer::singleShot, виртуальные методы...
hoRUS
  опции профиля:
сообщение 12.8.2011, 13:10
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 10.7.2008
Из: Москва
Пользователь №: 231

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




Репутация:   0  


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

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

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


, где initInstance() - какой-то слот, в котором вызываются виртуальные функции?
И дополнительно, я так понимаю, после создания экземпляра объекта нужно говорить что-то вроде QCoreApplication::processEvents() .
Насколько такие действия правомерны, нет ли там скрытых (или не скрытых) граблей?
Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.8.2011, 18:12
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


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

Цитата(hoRUS @ 12.8.2011, 16:10) *
Насколько такие действия правомерны, нет ли там скрытых (или не скрытых) граблей?
это обычная работа таймера.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 19.8.2011, 8:06
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


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

Очень полезная функция, надо признать...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 15.11.2019, 5:22