gtkmm 中对应于 g_signal_handlers_block_by_func() 的是什么?

3

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

在C语言中,可以使用g_signal_handlers_block_by_func()和与之对应的解锁函数。

C++ gtkmm中有什么可以使用的方法?

我有一个gtkmm dlna播放器,每秒向Gtk::HScale小部件发出changed信号,因为它从外部接收到正在播放的歌曲的信号。然后我会寻找当前位置,将歌曲设置回一小段时间...

我想要阻止我的变化来自搜索,因为我看到一个C程序使用了g_signal_handlers_block_by_func。


2
发现了:connect调用的返回值具有阻塞/解除阻塞方法。 - Jörg Beyer
1
你可以将其发布为答案来回答自己的问题! - ptomato
1个回答

4

因为ptomato的提问:

我从未意识到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();

这样不会发出更改信号。


我认为这正是我需要的!非常感谢你对你的情况和解决方案进行清晰的解释。 - underscore_d
1
然而,现在我再看一遍,值得一提的是返回对象的类型是sigc::connection,来自于libsigc++,这是一个被*mm库广泛使用的C++回调库。 - underscore_d
我该如何给你更多的积分?为什么这个问题没有任何文档记录? - Plasty Grove

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接