Ultralig.ht开发点击标题栏关闭按钮调用Hide仍关闭窗口问题求助
问题原因
Ultralight 框架的 OnClose 回调仅作为关闭事件的通知入口,默认在回调执行完成后,框架会自动触发后续的窗口销毁流程。仅在回调中调用 Hide() 不会阻止这个默认销毁逻辑,所以点击标题栏关闭后窗口对象实际已经被释放,后续调用 Show() 自然无响应。而通过托盘按钮主动调用 Hide() 时没有触发关闭事件流,窗口对象仍存活,所以可以正常唤起。
解决方法
Ultralight 提供了 set_close_cancelled() 方法用于终止默认的关闭流程,你需要在 OnClose 回调中先调用该方法,再执行窗口隐藏逻辑,修改后的代码如下:
void MyApp::OnClose(ultralight::Window* window) { // 阻止框架默认的窗口销毁逻辑 window->set_close_cancelled(true); // 执行窗口隐藏,直接使用回调传入的window对象即可,无需依赖全局window_指针 window->Hide(); // app_->Quit()保持注释即可 }
跨平台适配补充
- Windows端:实现托盘退出功能时,需要主动调用
app_->Quit(),否则应用会长期驻留后台无法正常退出。 - Mac端:应用初始化阶段需要额外调用
app_->set_quit_on_window_close(false),避免系统在所有窗口关闭后自动触发应用退出逻辑。
内容的提问来源于stack exchange,提问作者Kai
相关产品推荐
相关产品推荐

