2

自分で (間接的に) 発信するシグナルをブロックする必要があります。

C では、g_signal_handlers_block_by_func() と姉妹関数 unblock を使用できます。

C++ gtkmm では何を使用できますか?

私は gtkmm dlna プレーヤーを持っています。これは、変更された信号を毎秒 Gtk::HScale ウィデットに送信します。これは、ちょうど再生された曲の信号を (外部から) 取得するためです。そして、現在の位置を探して、曲を一瞬戻しました...

C プログラムが g_signal_handlers_block_by_func でそれを行っているのを見たので、シークからの変更をブロックしたいと思います。

4

1 に答える 1

3

ptomatoが尋ねたので:

connect メソッドには貴重な戻り値があることに気づきませんでした。

したがって、次のように信号を接続すると:

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

私の状況では、値を変更する方法が 2 つあります。1.) 誰かがスライダーを引っ張る: 値を更新してシークする必要があります。

次に、次のようにブロック/ブロック解除できます。

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

これは変更された信号を送信しません。

于 2012-11-29T10:06:27.493 に答える