gtkmm: обновить графический интерфейс из другой ветки? - PullRequest
0 голосов
/ 16 апреля 2009

Я использую gtkmm (и glibmm), и я хотел бы обновить графический интерфейс из другого потока. Я следовал примеру на

http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/thread_2dispatcher_8cc-example.html#_a1

но у меня есть 2 вопроса:

  • Вместо Glib :: MainLoop, принимающего события, возможно ли для Gtk :: Main (который запускает мое окно) принимать сигналы?

  • Могу ли я .connect () функционировать с аргументами каким-либо образом? Я знаю, что это возможно с помощью SigCX, но я думал, что синтаксис там был немного противным.

спасибо!

1 Ответ

1 голос
/ 30 апреля 2009

Вы можете сделать так, чтобы ваш Glib :: MainLoop получил события, а затем отправил их в Gtk :: Main.

Я считаю, что единственный способ соединиться с пользовательскими аргументами - это использовать sigc :: bind.

Например, допустим, вы хотите передать целое число, а также указатель на рассматриваемый виджет:

pWidget->signal_foo().connect( 
            sigc::bind<int, Gtk::SomeWidget*>( 
                sigc::mem_fun( *this, &Bar::OnFooBar ), i, pWidget ) );  
...