2

我需要阻止我自己(间接)发出的信号。

在 C 中可以使用 g_signal_handlers_block_by_func() 和姊妹函数 unblock。

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

我有一个 gtkmm dlna 播放器,它每秒都会向 Gtk::HScale Widet发出改变的信号,因为它(从外部)获得了刚刚播放的歌曲的信号。然后我寻找到当前的位置,这让这首歌倒退了一秒......

我想阻止我对搜索的更改,因为我看到一个 C 程序使用 g_signal_handlers_block_by_func 完成了该操作。

4

1 回答 1

3

自从番茄问:

我从来没有意识到,connect 方法有一个有价值的返回值:

所以如果你像这样连接信号:

mywidget_connection = mywidget.signal_value_changed().connect(sigc::mem_fun(*this, &MyClass::on_value_changed ));

在我的情况下,我有两种更改值的方法:1.)有人拉动滑块:应该更新值并寻找 2.)计时器出现并告诉新位置:应该更新值但不寻找。

然后你可以像这样阻止/取消阻止:

mywidget_connection.block();
mywidget.set_value(new_value);
mywidget_connection.unblock();

这不会发出改变的信号。

于 2012-11-29T10:06:27.493 回答