我想顯示一個消息框,如果正在運行的程序的PID爲有效之前,這是我的呈香代碼:雙的Gtk :: Messadialog退出
Gtk::Main kit (argc, argv);
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;
}
FormUI * ui = 0;
refBuilder->get_widget_derived ("window1", ui);
if (ui) {
kit.run (*ui);
}
delete ui;
構造:
signal_delete_event().connect (sigc::mem_fun (*this, &FormUI::on_delete_event));
方法:
bool FormUI::on_delete_event (GdkEventAny* event) {
if (_pid) {
bool retState;
Gtk::MessageDialog md(*this, Glib::ustring::compose ("<b>%1</b>", _("Warning: youtube-dl in process")), true, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_YES_NO, true);
md.set_title (PACKAGE_STRING);
md.set_secondary_text (_("Closing can generate a corrupted file, do you want to continue anyway?"));
if (md.run() == Gtk::RESPONSE_YES) {
kill (_pid, 0);
retState = false;
} else {
retState = true;
}
md.hide();
return retState;
}
return false;
}
有了以上所述,如果pid有效,它會按預期顯示消息對話框,但如果我點擊「是」(退出應用程序),它會顯示另一個消息對話框。爲什麼?
如果重命名'on_delete_event()'方法會發生什麼? (如果這樣做,等待答案;它會有解釋,或者你可以嘗試從這個評論的其餘部分推斷它。)並且是''從'Gtk :: Window'派生的'FormUI'?我假設它來自你的'refBuilder-> get_widget_derived()'調用,但我想確定。 – andlabs 2015-02-26 04:23:07
哇,我將刪除處理程序重命名爲cb_on_delete_event,它按預期工作:只有一個messagedialog。是的,FormUI源自Gtk :: Window,它來自構建器。 – Joel 2015-02-26 06:20:19