Название: Вызов слота Отправлено: onlik от Февраль 05, 2009, 01:16 Здравствуйте!
Встречаю такие конструкции QTimer::singleShot(0, this, SLOT(Slot())) Почему нельза просто вызвать Slot() ? Название: Re: Вызов слота Отправлено: Dendy от Февраль 05, 2009, 01:22 Такая конструкция перенесёт вызов слота на следующую итерацию цикла событий. Полезно если хочется обьединить несколько вызовов метода в один.
Название: Re: Вызов слота Отправлено: onlik от Февраль 05, 2009, 01:37 Спасибо!
Название: Re: Вызов слота Отправлено: Alex Custov от Февраль 05, 2009, 14:47 Такая конструкция перенесёт вызов слота на следующую итерацию цикла событий. Полезно если хочется обьединить несколько вызовов метода в один. Такой способ не объединит несколько вызовов в один, т.к. для каждого будет существовать свой таймер. Нужно использовать один и тот же таймер, что так получилось: Код: timer = new QTimer(this); Название: Re: Вызов слота Отправлено: ритт от Февраль 05, 2009, 18:51 речь идёт о чём-то вроде
Код: update(); также весьма полезно использовать такой вызов для слотов с проверками. например: Код: bool SomeClass::isEnabled() const Код: bool b = isEnabled(); // `b` сейчас установлен true но нам нужно чтобы выполнилась `длительная операция обновления` Код: bool b = isEnabled(); // `b` сейчас установлен true (или в false - нам уже необязательно это знать) ну, вот примрено так ) Название: Re: Вызов слота Отправлено: Dendy от Февраль 05, 2009, 18:52 Цитировать Такой способ не объединит несколько вызовов в один Всё верно, слот будет вызван на следующей итерации столько раз сколько было вызовов QTimer::singleShot(). Обычно этот самый слот содержит проверку на оптимизации, чтобы не вызывать один и тот же код несколько раз. |