我在我的程序后台运行一个超时函数,我试图从 Gtk::Button 发出一个删除事件信号,这是我的构造函数中的代码片段:
// Glib::SignalProxy1<bool,GdkEventAny*> m_deleteSlot;
// m_deleteSlot =
signal_delete_event().connect (sigc::mem_fun (*this, &AlarmUI::my_delete_event));
m_timeout_connection = Glib::signal_timeout().connect_seconds(sigc::mem_fun(*this, &AlarmUI::cb_my_tick), 1);`
现在,方法:
bool AlarmUI::my_delete_event (GdkEventAny *event) {
if (m_timeout_connection.connected ()) {
// show messagebox here
return true;
} else {
// bye bye
return false;
}
}
现在,当用户点击退出按钮时,我想发出删除事件信号。问题:如何像在 C g_signal_emit 或 g_signal_emit_by_name 中那样在 gtkmmm 中发射信号?
void AlarmUI::on_button_quit () {
// m_deleteSlot.emit (); ???
}
更新1:
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create (argc, argv, PACKAGE);
Glib::RefPtr<Gtk::Builder> refBuilder = Gtk::Builder::create ();
try {
refBuilder->add_from_file (UI_PATH);
}
catch (const Glib::FileError& ex) {
std::cout << "FileError: " << ex.what() << std::endl;
return 1;
}
catch (const Gtk::BuilderError& ex) {
std::cout << "BuilderError: " << ex.what() << std::endl;
return 1;
}
catch(const Glib::MarkupError& ex)
{
std::cout << "MarkupError: " << ex.what() << std::endl;
return 1;
}
AlarmUI *ui = 0;
refBuilder->get_widget_derived ("window1", ui);
if (ui) {
ui->show_all ();
app->run (); // The window doesn't show
}
delete ui;
最佳答案
从小部件外部发出小部件信号通常是不明智的。这会干扰小部件实现的内部结构。如果你想隐藏窗口,你可以调用 thewindow.hide() ,如果你想销毁它,你可以删除它。或者您可以通过发出删除事件信号来直接执行您想要间接触发的任何其他操作。
关于c++ - gtkmm 的 g_signal_emit 或 g_signal_emit_by_name 版本是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28783839/