2012-11-28 87 views
1

我需要阻止我發出(間接)我自己的信號。相當於g_signal_handlers_block_by_func()的gtkmm是什麼?

在C中,可以使用g_signal_handlers_block_by_func()和姐妹函數unblock。

我可以在C++ gtkmm中使用什麼?

我有一個gtkmm dlna播放器,它發出已更改信號爲每秒一個Gtk :: HScale Widet,因爲它從外部獲取剛剛播放的歌曲的信號。然後我試圖找到當前位置,即將歌曲重新設置爲瞬間位置...

我想阻止我對seek的更改,因爲我看到一個C程序使用g_signal_handlers_block_by_func 。

+2

我自己發現它:連接調用的返回值有一個塊/解鎖方法。 –

+1

您可以將其發佈爲回答您自己的問題的答案! – ptomato

回答

2

因爲ptomato問:

我從來沒有意識到,該連接方法有一個寶貴的返回值:

所以如果你連接的信號是這樣的:

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(); 

並且這不發射改變的信號。

+0

我認爲這正是我需要的!非常感謝您對情況和解決方案的明確解釋。 –

+0

...但是,現在我再看一遍,值得一提的是,返回對象的類型是['sigc :: connection'](http://libsigc.sourceforge.net/libsigc2/來自[libsigC++](http://libsigc.sourceforge.net/)的一個C++回調函數庫,這些函數庫很大程度上由*'mm'庫使用。 –