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

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

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

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

提前谢谢..

【问题讨论】:

    标签: c++ gtk gtkmm


    【解决方案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(),它就会显示出来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多