Russian Qt Forum

Qt => Общие вопросы => Тема начата: xintrea от Декабрь 30, 2015, 00:56



Название: Как временно запретить выполнение слотов?
Отправлено: 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();
    QStringList methods;
    for(int i = metaObject->methodOffset(); i < metaObject->methodCount(); ++i)
        methods << QString(metaObject->method(i).methodSignature());

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), чтобы впредь таких вопросов не возникало.