ershovdz Posted April 7, 2023 Posted April 7, 2023 Здравствуйте ! Можно ли как то встроится в обработку события нажатия на кнопку крестик - "Закрыть приложение" ? Например, хочется показать диалог пользователю и если он откажется, то не закрывать приложение.
cash-metall Posted April 10, 2023 Posted April 10, 2023 Здравствуйте! для этого нужно у окна выставить флаг setIgnoreSystemClose и подписаться на события окна, где можно поймать событие ACTION_CLOSE и выполнить какуюто свою логику namespace CloseDialog { void close_dialog(WidgetDialogPtr w) // on cancel { w->deleteLater(); } void quit() // on ok { Engine::get()->quit(); } void on_window_event(WindowEventPtr event) { auto gevent = event->getGeneric(); if (gevent && gevent->getAction() == WindowEventGeneric::ACTION_CLOSE) // if its close event { auto gui = WindowManager::getMainWindow()->getSelfGui(); auto w_dialog = WidgetDialog::create(gui, "Are you sure?"); //create dialog w_dialog->getOkButton()->addCallback(Gui::CLICKED, MakeCallback(&CloseDialog::quit)); gui->addChild(w_dialog, Gui::ALIGN_CENTER | Gui::ALIGN_OVERLAP); w_dialog->getCancelButton()->addCallback(Gui::CLICKED, MakeCallback(&CloseDialog::close_dialog, w_dialog)); gui->addChild(w_dialog, Gui::ALIGN_CENTER | Gui::ALIGN_OVERLAP); } } void init() { WindowManager::getMainWindow()->setIgnoreSystemClose(true); // set flag WindowManager::getMainWindow()->addCallback(EngineWindow::CALLBACK_WINDOW_EVENT, MakeCallback(&CloseDialog::on_window_event)); // subscribe on events } }; int AppSystemLogic::init() { CloseDialog::init(); return 1; }
Recommended Posts