Gtkmm - 隐藏窗口而不关闭应用程序

Posted

技术标签:

【中文标题】Gtkmm - 隐藏窗口而不关闭应用程序【英文标题】:Gtkmm - Hiding a window without closing the application 【发布时间】:2012-06-10 10:33:49 【问题描述】:

如何隐藏顶层窗口而不关闭它?

NdmWindow 是一个继承自 Gtk::Window 的类。 我已将 NdmWindow 的实例添加到 Gtk::Application。

现在,我如何隐藏它而不是关闭它?

提前谢谢..

【问题讨论】:

【参考方案1】:

根据this,行为是当一个窗口被隐藏时,它会从Gtk::Application中删除,所以如果它是最后一个窗口,应用程序就会退出。

如果您希望您的应用程序在没有窗口显示时继续运行,解决方案是在您的Gtk::Application 对象上调用hold() 以增加应用程序的引用计数。大概您在设置任何窗口之前执行此操作,并调用相应的release() 作为退出逻辑的一部分。

【讨论】:

【参考方案2】:

window->hide();

不要忘记查看 Gtk::Window 继承自的类。

编辑

我不知道,但我的建议是在显示下一个窗口后尝试hold(),然后再尝试release()

【讨论】:

我能找到的仅有的两个函数是 hide() 和 set_visible()。都继承自 Gtk::Widget 并且都退出了应用程序。 这就是为什么你永远不应该报告你已经尝试过的事情 ;-) 你的问题是:如何隐藏一个窗口而不关闭它? 如果你不这样做假设您知道hide() 并且已经尝试过,那么人们会认为您需要hide() 而您只是没有阅读文档。我不知道你真正问题的答案,但我有一个猜测 - 请参阅编辑。 非常感谢。保持和释放是我正在寻找的。​​span> 【参考方案3】:

这是一个有效但无效的解决方案segfault。 保存对Gtk::Application 的引用,例如将其作为参数发送到您的主Window class 并调用此var app,稍后您将需要它,因为在某些情况下get_application() 将返回null

在您的窗口调用的删除事件处理程序中

app->hold();
hide();
return true;

当你想让你的窗口再次出现时不要调用app->release(),因为它会让你的应用程序完全退出。只需在窗口对象上调用set_visible(),它就会显示出来。

【讨论】:

以上是关于Gtkmm - 隐藏窗口而不关闭应用程序的主要内容,如果未能解决你的问题,请参考以下文章

gtkmm & glade - 多个窗口不工作

Gtkmm 从课堂外关闭一个 gui 窗口

无法获取小部件的高度/宽度 - gtkmm

Gtkmm 应用程序在取消引用窗口对象时崩溃

使用宏或 VBA 正确关闭 access 2003 中的隐藏窗口?

c#里面如何显示下一个窗体而关闭当前窗体?