gtkmm的g_signal_emit或g_signal_emit_by_name版本是什么?
What would be gtkmm's version of g_signal_emit or g_signal_emit_by_name?
我正在程序后台运行一个超时函数,并试图从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;
}
}
现在,当用户单击退出按钮时,我想发出删除事件信号。问题:如何在gtkmmm中像在C g_signal_mit或g_signal_mit_by_name中那样发射信号?
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;
从小部件外部发出小部件信号通常是不明智的。这会干扰小部件实现的内部。如果你想隐藏窗口,你可以调用window.hide(),如果你想销毁它,你可以删除它。或者你可以直接做任何你想通过发出删除事件信号间接触发的事情。
相关文章:
- 调用 raise(signal) 会终止 c++ 程序
- 未调用 signal() 指定的处理程序
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- 将成员函数传递给 std::signal
- 在 C++11 中,signal.h 标头没有 kill 函数
- 节点.js到 c++ 客户端:不接收来自 socket.emit 的消息
- QTableWidget dataChanged SIGNAL
- connect(QObject*, SIGNAL(signal()), functor) 在 qt5 中未连接
- QSharedPointer 在 emit 中被销毁
- "Static polymorphism with Qt signal/slot: What is wrong?"
- Qt 编译器错误:未在此范围内声明"emit"
- 为什么此程序以"unknown signal"终止?
- llvm 异常 - 提高异常 "?:Unknown signal"
- 为什么我可以通过自定义对话框获得"QMetaObject::connectSlotsByName: No matching signal"?
- Signal ReadyRead()不执行插槽
- Qt UDPsocket readyread() SIGNAL 发出两次
- QObject::connect not connecting signal to slot
- 对qt中的signal和slots使用另一个类对象
- QAbstractSpinBox - indexChanged signal
- SIGSEGV(signal 11) 'segmentation fault' in FCTRL2 codechef