发出信号到窗口



我有以下代码片段:

win = new Gtk::Window;
m_canvas = new Goocanvas::Canvas;
sigc::connection conn_t1 = m_canvas->signal_event().connect( sigc::ptr_fun( &AnyEvent));
sigc::connection conn_t2 = win->signal_event().connect( sigc::ptr_fun( &WinHandler));

现在我还注册一个生成信号的iDlehandler:

Glib::signal_idle().connect( sigc::mem_fun( *this, &IdleSendEvent::Do));

我想实现的目标:画布的处理程序应收到一个事件,并应生成一个新的事件,并且该事件应发送到对象,以便再次致电m_canvas-> signal_event()。

换句话说:间接通过空闲处理程序,信号应发送到发送对象本身。

,但是如果我向

开火
g_signal_emit_by_name (m_canvas->gobj(), "button-press-event", event, &return_val);

信号本身不是在帆布本身中收到的,而是在某些子对象中收到的。

Q:如何再次伸入画布?是否有诸如" get_the_parent_signal_object_handler_father_receiver"之类的东西?

我做了很多gtk_widget_get_parent_window(),但是所有结果都在运行时错误,例如:

(GO:15430):Glib-Gobject-warning **:gsignal.c:3484:信号名称'button-press-event'无效,例如'0x9afbc48'类型'gdkx11window'

我根本不知道在哪里可以找到正确的实例,然后我必须将其删除一个信号,然后收到画布的信号。看来g_signal_emit_by_name的实例不向对象本身,而是所有子女实例。我找不到文档如何处理信号以及如何通过层次结构进行操作。问题之一是GTK 和GTKMM是相关的,但文档完全不清楚和分散。

您不能发出信号 一个特定对象。您只能从一个对象发出信号,该对象将由连接到发射对象的信号的任何信号处理程序接收。对象没有接收信号,只有信号处理程序。(尽管信号处理程序可能是对象的一种方法。)

g_signal_emit_by_name()的第一个参数必须是发射对象。

使信号处理程序接收信号,使用g_signal_connect(emitter, signal_name, handler, user_data)或其C 等效的sigc::signal::connect(),就像您在上面的示例代码中所做的那样。

相关内容

  • 没有找到相关文章

最新更新