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 - 隐藏窗口而不关闭应用程序的主要内容,如果未能解决你的问题,请参考以下文章