Russian Qt Forum

Qt => Общие вопросы => Тема начата: Cyrax от Январь 14, 2008, 00:00



Название: Временная блокировка сигналов...
Отправлено: Cyrax от Январь 14, 2008, 00:00
Каким образом можно временно заблокировать генерацию сигнала некоторым виджетом ?
В частности, необходимо сделать так, чтобы во время программного изменения списка QComboBox'а (включая текущий индекс), тот (QComboBox) не генерировал сигнал currentIndexChanged().
Фильтры событий, как я понял, совсем не то.
Можно, конечно, временно отсоединить все слоты от этого сигнала, но это слишком геморно, особенно, если подсоединено много слотов. Да и вообще может быть неизвестно, какие слоты подсоединены к данному сигналу...


Название: Re: Временная блокировка сигналов...
Отправлено: pastor от Январь 14, 2008, 00:48
Да, ассистент не хотим читать

Цитировать
QObject::blockSignals ( bool block )

Пример:

Цитировать
bool blocked = comboBox->blockSignals(true);

//do_something

comboBox->blockSignals(blocked);


Название: Re: Временная блокировка сигналов...
Отправлено: Alex03 от Январь 14, 2008, 07:28
... В частности, необходимо сделать так, чтобы во время программного изменения списка QComboBox'а (включая текущий индекс), тот (QComboBox) не генерировал сигнал currentIndexChanged(). ...
Пользуйте сигнал activated()
Цитировать
There are two signals emitted if the current item of a combobox changes, currentIndexChanged() and activated(). currentIndexChanged() is always emitted regardless if the change was done programmatically or by user interaction, while activated() is only emitted when the change is caused by user interaction.


Название: Re: Временная блокировка сигналов...
Отправлено: Cyrax от Январь 14, 2008, 19:50
thanks...