Название: сигналы и слоты, цикл событий, очередь событий Отправлено: danya7sh от Июнь 07, 2016, 20:31 Здравствуйте, подскажите пожалуйста, как в СЕРЕДИНЕ слота можно разрешить закончить работу, приостановленную из-за вызова этого слота?
Получается, если разбить на ДВА слота, присоединяя один из, используя тип Qt::QueuedConnection, но такой вариант не устраивает. Название: Re: сигналы и слоты, цикл событий, очередь событий Отправлено: Bepec от Июнь 07, 2016, 21:14 Никак. А в чем смысл столь странной и непонятной задачи?
Название: Re: сигналы и слоты, цикл событий, очередь событий Отправлено: _OLEGator_ от Июнь 07, 2016, 21:18 Что значит разрешить закончить работу?
В слоте вызвать другой слот асинхронно и return после. Название: Re: сигналы и слоты, цикл событий, очередь событий Отправлено: danya7sh от Июнь 07, 2016, 21:29 смысл в том, чтобы не использовать два слота
при нажатии на кнопку запускаю цикл, в цикле запускаю функцию, которая анимирует элементы но при нажатии другой кнопки нужно сначала закончить анимацию текущей итерации цикла и выйти из цикла, а потом уже делать то, для чего вызван слот Название: Re: сигналы и слоты, цикл событий, очередь событий Отправлено: danya7sh от Июнь 07, 2016, 21:34 как вызвать асинхронно?
Название: Re: сигналы и слоты, цикл событий, очередь событий Отправлено: Hellraiser от Июнь 08, 2016, 07:59 Не вызывай слот напрямую, а используй QMetaObject::invokeMethod (http://doc.qt.io/qt-5/qmetaobject.html#invokeMethod) с параметром Qt::QueuedConnection
Название: Re: сигналы и слоты, цикл событий, очередь событий Отправлено: Igors от Июнь 08, 2016, 08:07 смысл в том, чтобы не использовать два слота Если все в главном потоке, то нужен вторичный цикл событий, напрпри нажатии на кнопку запускаю цикл, в цикле запускаю функцию, которая анимирует элементы но при нажатии другой кнопки нужно сначала закончить анимацию текущей итерации цикла и выйти из цикла, а потом уже делать то, для чего вызван слот Код
Название: Re: сигналы и слоты, цикл событий, очередь событий Отправлено: Bepec от Июнь 08, 2016, 12:46 Прокручивать цикл и в конце каждой итерации вызывать processEvents. Тогда, по идее, слот вызванный позднее анимации совершит свою работу, а цикл анимации после этого продолжится. Но тут уже пробовать надо :)
|