Название: Как временно запретить выполнение слотов? Отправлено: xintrea от Декабрь 30, 2015, 00:56 Нужно мне временно, на период выполнения некоторых действий, запретить объекту обрабатывать сигналы. Другими словами, надо запретить выполнение слотов.
Я нашел только метод QObject::blockSignals(bool block). А нужно нечто наподобие QObject::blockSlots(bool block), но такого метода нет. Как сделать запрет выполнения слотов? Название: Re: Как временно запретить выполнение слотов? Отправлено: Bepec от Декабрь 30, 2015, 00:59 Т.е. вы хотите запретить полностью выполнение слотов, даже если их вызовут как обычные методы?
Ну тут я не вижу другого выхода как страж. Условие воткнуть с булевской переменной, если кто не понял. Название: Re: Как временно запретить выполнение слотов? Отправлено: xintrea от Декабрь 30, 2015, 01:08 Т.е. вы хотите запретить полностью выполнение слотов, даже если их вызовут как обычные методы? Ну тут я не вижу другого выхода как страж. Условие воткнуть с булевской переменной, если кто не понял. И в каждый слот прописывать условие? Это как-то ненадежно. Может быть, можно хотя бы получить перечень определенных пользователем слотов? Название: Re: Как временно запретить выполнение слотов? Отправлено: Bepec от Декабрь 30, 2015, 05:17 Можно получить все слоты, но это работает исключительно с наличием дебажной информации.
Код: const QMetaObject* metaObject = this->metaObject(); blockSignals вам в принципе же подходит. Другой вопрос что вам возможно неудобно будет управлять объектом, но тут уже от задачи зависит. PS не вижу проблемы. Название: Re: Как временно запретить выполнение слотов? Отправлено: Old от Декабрь 30, 2015, 11:03 Можно получить все слоты, но это работает исключительно с наличием дебажной информации. Ерунда. Это прекрасно работает и исключительно без наличия дебажной информации. :)Название: Re: Как временно запретить выполнение слотов? Отправлено: GreatSnake от Декабрь 30, 2015, 11:23 Наверное всё-таки стоит сначала изучить азы (http://doc.crossplatform.ru/qt/4.7.x/signalsandslots.html#slots), чтобы впредь таких вопросов не возникало.
|