crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> есть ли способ разом включить/отключить все слоты объекта?
kuler
  опции профиля:
сообщение 16.1.2009, 17:34
Сообщение #1


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


на время, то есть к примеру есть 20 слотов на сигналы и временно нужно реакцию объекта на них отрубить, чтобы не писать 20 раз длинную строчку дисконнект, а потом также подрубать. Может ответ банален, но мне на ум не приходит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2009, 17:44
Сообщение #2


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(kuler @ 16.1.2009, 17:34) Link
на время, то есть к примеру есть 20 слотов на сигналы и временно нужно реакцию объекта на них отрубить, чтобы не писать 20 раз длинную строчку дисконнект, а потом также подрубать. Может ответ банален, но мне на ум не приходит.


есть такая штука

Цитата
bool QObject::blockSignals ( bool block )
If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it). If block is false, no such blocking will occur.

The return value is the previous value of signalsBlocked().

Note that the destroyed() signal will be emitted even if the signals for this object have been blocked.

See also signalsBlocked().



есть такая

Цитата
bool QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method ) [static]

Disconnects signal in object sender from method in object receiver. Returns true if the connection is successfully broken; otherwise returns false.

A signal-slot connection is removed when either of the objects involved are destroyed.

disconnect() is typically used in three ways, as the following examples demonstrate.

Disconnect everything connected to an object's signals:
disconnect(myObject, 0, 0, 0);
equivalent to the non-static overloaded function

myObject->disconnect();
Disconnect everything connected to a specific signal:
disconnect(myObject, SIGNAL(mySignal()), 0, 0);
equivalent to the non-static overloaded function

myObject->disconnect(SIGNAL(mySignal()));
Disconnect a specific receiver:
disconnect(myObject, 0, myReceiver, 0);
equivalent to the non-static overloaded function

myObject->disconnect(myReceiver);
0 may be used as a wildcard, meaning "any signal", "any receiving object", or "any slot in the receiving object", respectively.

The sender may never be 0. (You cannot disconnect signals from more than one object in a single call.)

If signal is 0, it disconnects receiver and method from any signal. If not, only the specified signal is disconnected.

If receiver is 0, it disconnects anything connected to signal. If not, slots in objects other than receiver are not disconnected.

If method is 0, it disconnects anything that is connected to receiver. If not, only slots named method will be disconnected, and all other slots are left alone. The method must be 0 if receiver is left out, so you cannot disconnect a specifically-named slot on all objects.

Note: This function is thread-safe.

See also connect().


тебе подойдет
myObject->disconnect(myReceiver);

Сообщение отредактировал kwisp - 16.1.2009, 17:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2009, 17:46
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


я думаю если и поможет то видимо класс Link
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
spirit
  опции профиля:
сообщение 16.1.2009, 17:56
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 16
Регистрация: 13.1.2009
Из: Ukraine, Krivoy Rog
Пользователь №: 486

Спасибо сказали: 1 раз(а)




Репутация:   1  


Цитата
bool QObject::blockSignal(bool)


это самое оно


bool isBlocked = myWidget->blockSignals(true);//блокируем сигналы

//делаем то, что нужно

myWidget->blockSignals(isBlocked);//восстанавливаем первоначальное состояние объекта
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2009, 18:01
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(spirit @ 16.1.2009, 20:56) Link
это самое оно
и все равно прийдется писать много раз, я сомневаюсь, что человек на 20 слотов одного объекта прицепил один сигнал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2009, 18:04
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 16.1.2009, 18:01) Link
Цитата(spirit @ 16.1.2009, 20:56) Link
это самое оно
и все равно прийдется писать много раз, я сомневаюсь, что человек на 20 слотов одного объекта прицепил один сигнал.


не согласен. я же кинул доку выше там все написано.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2009, 18:12
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 16.1.2009, 21:04) Link
я же кинул доку выше там все написано.
вот еслиб ты ее перевел, другое б дело ;)

Цитата(kwisp @ 16.1.2009, 20:44) Link
myObject->disconnect(myReceiver);
тут мы залпом все отключили, а подключить так не выйдет. Тогда нужно соединение сигналов организовать в отдельной функции, тогда ее можно использовать и при конструировании объекта и при временной блокировке.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2009, 18:16
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


переводами занимаетесь вы насколько я осведомлен:)

я же написал что подойдет из всего именно myObject->disconnect(myReceiver);

а организовывать соединения в отдеьной функции неплохо, если указатели на соединяемые объекты не меняются.
:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2009, 21:11
Сообщение #9


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


вариант плачевный если 20 объектов высылают сигналы к объекту с 20 слотами.
тогда 20 раз писать блоксигнал не вариант.
а если объектов всего 2,3 то вариант неплохой.
используя разъединения а не блок сигнал правда возникает вопрос как соединиить обратно.??? можно написать соединяющую функцию.

а вообще если приведешь конкретный код можно подумать как разрулить ситуацию.
может не только сигналы и слоты для этого использовать....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.1.2009, 5:03
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


kuler, еще вариант использовать один слот и Link
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 11.3.2026, 15:45