Russian Qt Forum
Ноябрь 05, 2024, 22:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как определить был ли подключен сигнал к слоту  (Прочитано 10412 раз)
Evgeniya
Гость
« : Август 06, 2009, 15:07 »

доброго времени суток!!!
мне нужно определить был ли подключен сигнал к слоту или нет...Просто мне нужно, чтобы в определенном месте программы сигнал не испускался, но он к этому времени может быть и не подключен еще...А прменение disconnect к неподключенному сигналу наверное не желательно
Записан
MoPDoBoPoT
Гость
« Ответ #1 : Август 06, 2009, 16:31 »

Как определить был ли подключен сигнал к слоту мне не известно, но, по-моему, нет ничего страшного в применении disconnect к неподключеному сигнал-слотовому соединению. Метод disconnect просто вернет false.
Записан
max1983
Гость
« Ответ #2 : Август 07, 2009, 01:30 »

Как определить был ли подключен сигнал к слоту мне не известно, но, по-моему, нет ничего страшного в применении disconnect к неподключеному сигнал-слотовому соединению. Метод disconnect просто вернет false.

суть проверки  в том и заключается что не знаешь подключён или нет, а проверить надо не отключая, вдруг соединены разные потоки.
И становится страшно...
а при "проверке" отключая и потом опять подключая могут быть сбои.  Плачущий
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Август 07, 2009, 09:27 »

Можно на время выполнения какой-либо операции просто блокировать сигналы. См. QObject::blockSignals
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
SASA
Гость
« Ответ #4 : Август 07, 2009, 19:02 »

Цитировать
мне нужно определить был ли подключен сигнал к слоту или нет...
Код:
void QObject::connectNotify ( const char * signal ) 
{
Булевскую переменную взвели
}
void QObject::disconnectNotify ( const char * signal )
{
Булевскую переменную сбросили
}
Цитировать
Просто мне нужно, чтобы в определенном месте программы сигнал не испускался, но он к этому времени может быть и не подключен еще...А прменение disconnect к неподключенному сигналу наверное не желательно
Смотри ответ pastor'а
« Последнее редактирование: Август 07, 2009, 19:05 от SASA » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Август 08, 2009, 11:04 »

А вот с етого момента по подробней..
Как ето поможет в определении соединены ли слот с сигналом?

А где я сказал что это поможет в определении соединения сигнал-слот? о_О Вот на что я ответил:


Просто мне нужно, чтобы в определенном месте программы сигнал не испускался


В по поводу проверки: Нельзя. Таких методов как isConnected(...), isDisconnected(...) в Qt нет.
« Последнее редактирование: Август 08, 2009, 11:05 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Rcus
Гость
« Ответ #6 : Август 08, 2009, 12:13 »

/** закрыл глаза */ Действительно нет...
/** открыл ассистант */
Цитировать
int QObject::receivers ( const char * signal ) const   [protected]
...
Warning: This function violates the object-oriented principle of modularity. However, it might be useful when you need to perform expensive initialization only if something is connected to a signal.
Уже есть Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Август 08, 2009, 12:39 »

Да, я знаю есть такой метод. Но как он может помочь в случае, если мне нужно определить наличие коннекта между конкретным источником и конкретным приемником? + этот метод protected, что тоже не во всех случаях удобно.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Август 08, 2009, 15:32 »

есть такая тема на кросплатформе:  Есть ли метод, чтобы узнать соединен ли сигнал со слотом?, и если соединен то сколько раз?

И там есть упоминание такого метода:
Код
C++ (Qt)
QMetaObject::indexOfSlot( "myslot()")
Записан

Юра.
Evgeniya
Гость
« Ответ #9 : Август 10, 2009, 09:31 »

Спасибо огромное за ответы!!!
А если все же использвать disconnect и сигнал не будет подключен к слоту, то к чему это может привести???или это все-таки ничего страшного, как написал MoPDoBoPoT???
Записан
ритт
Гость
« Ответ #10 : Август 10, 2009, 10:34 »

тогда я бы всё-таки подстраховался таким образом:
Код:
bool wasConnected = disconnect(...);
//...
if(wasConnected)
    connect(...);
Записан
Evgeniya
Гость
« Ответ #11 : Август 10, 2009, 10:54 »

есть такая тема на кросплатформе:  Есть ли метод, чтобы узнать соединен ли сигнал со слотом?, и если соединен то сколько раз?

И там есть упоминание такого метода:
Код
C++ (Qt)
QMetaObject::indexOfSlot( "myslot()")

А этот метод ищет именно подключенный слот??просто он у меня никогда не возвращает -1...
Записан
ритт
Гость
« Ответ #12 : Август 10, 2009, 10:58 »

нет, данный метод возвращает индекс мета-метода в таблице мета-методов, что может быть использовано для некоторых оптимизаций, и к тебе совершенно не относится Улыбающийся
а возвращает "-1" потому, что (наверняка) указываешь неверную сигнатуру...
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #13 : Август 10, 2009, 19:20 »

а возвращает "-1" потому, что (наверняка) указываешь неверную сигнатуру...

он не возвращает "-1" Подмигивающий
Записан
ритт
Гость
« Ответ #14 : Август 10, 2009, 20:32 »

лол...по-ходу, сплю Улыбающийся
если даже с неверной сигнатурой не возвращает -1, то всё плохо...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.117 секунд. Запросов: 23.