Мне нужно заблокировать сигналы, которые я излучаю (косвенно) сам.
В C можно использовать g_signal_handlers_block_by_func () и разблокировать сестринскую функцию.
Что я могу использовать в C ++ GTKM?
У меня есть плеер GTKM DLNA, который испускает изменено Сигнал к Gtk :: HScale Widet каждую секунду, потому что он получает (извне) сигнал, что песня, которая только что играет. И тогда я стремлюсь к позиции, которая как раз там, где текущая, которая отбросила песню на долю секунды …
Я хотел бы заблокировать изменения при поиске, потому что я видел, что программа на C сделала это с помощью g_signal_handlers_block_by_func.
так как ptomato спросил:
Я никогда не осознавал, что метод connect имеет ценное возвращаемое значение:
так что если вы подключите сигналы так:
mywidget_connection = mywidget.signal_value_changed().connect(sigc::mem_fun(*this, &MyClass::on_value_changed ));
В моей ситуации у меня есть 2 способа изменить значение:
1.) кто-то тянет ползунок: следует обновить значение и искать
2.) приходит таймер и сообщает новую позицию: должен обновить значение, но не искать.
тогда вы можете заблокировать / разблокировать, как это:
mywidget_connection.block();
mywidget.set_value(new_value);
mywidget_connection.unblock();
и это не испускает измененный сигнал.
Других решений пока нет …