连接到 Gtk::Window signal_delete_event

Voo*_*ode 2 c++ gtk gtkmm

我想将信号连接到 window.signal_delete_event,但失败并显示以下错误消息:

\n\n
    \n
  • 与对 \xe2\x80\x98(sigc::bound_mem_functor0) (_GdkEventAny* const&)\xe2\x80\x99 OpticalInput 的调用不匹配
  • \n
  • 带有值的返回语句,在返回“void”的函数中[-fpermissive]
  • \n
  • void 值不应被忽略
  • \n
\n\n

这是导致错误的代码行:

\n\n
window.signal_delete_event().connect(sigc::mem_fun(this,&GUIWindow::onExitClicked));\n
Run Code Online (Sandbox Code Playgroud)\n\n

指向的成员函数是这个:

\n\n
void GUIWindow::onExitClicked()\n{\n    *state = false;\n    Gtk::Main::quit();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

有想法该怎么解决这个吗?

\n

erg*_*sys 5

您的方法必须与信号的签名匹配。在 的 gtkmm 文档中signal_delete_event(),给出了以下原型:

bool on_my_delete_event(GdkEventAny* event)
Run Code Online (Sandbox Code Playgroud)

使用您的命名,该方法必须定义如下:

bool GUIWindow::onExitClicked(GdkEventAny* event) { ... }
Run Code Online (Sandbox Code Playgroud)

返回值用于指示您是否已完全处理该事件。如果返回 true,则此事件的其他处理程序将看不到它。