首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >窗口在将我的gtkmm2移植到gtkmm3应用程序时显示和退出

窗口在将我的gtkmm2移植到gtkmm3应用程序时显示和退出
EN

Stack Overflow用户
提问于 2015-04-05 19:49:42
回答 1查看 149关注 0票数 0

我正在将我的gtkmm2移植到gtkmm3应用程序,到目前为止,这就是我所拥有的:

代码语言:javascript
复制
// The main.cxx:
#include "alarmui.hxx"

int main (int argc, char *argv[]) {
    Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm." PACKAGE_ID);
    alarm_ui win(app);
    app->run ();
    return 0;
}

标题:

代码语言:javascript
复制
// The alarmui.hxx
#ifndef ALARMUI_HXX_INC
#define ALARMUI_HXX_INC

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <gtkmm/application.h>
#include <gtkmm/window.h>
#include <gtkmm/statusicon.h>
#include <iostream>
#include <memory>
#include <functional>

class alarm_ui : public Gtk::Window
{
    private:
        Glib::RefPtr<Gtk::Application> _refApp;
        Glib::RefPtr<Gtk::StatusIcon> m_status_icon;
    public:
        alarm_ui (Glib::RefPtr<Gtk::Application>&);
        virtual ~alarm_ui ();
    protected:
        virtual bool delete_event (GdkEventAny*);
        void status_icon_activate_cb ();
};

#endif

源代码:

代码语言:javascript
复制
#include "alarmui.hxx"

alarm_ui::alarm_ui (Glib::RefPtr<Gtk::Application>& refApp) : _refApp(refApp)
{
    std::cout << "init" << std::endl;
    set_icon_from_file (ICON_PNG_PATH);
    m_status_icon = Gtk::StatusIcon::create_from_file (ICON_PNG_PATH);
    m_status_icon->signal_activate().connect (std::bind(&alarm_ui::status_icon_activate_cb, this));
    show_all ();
}

alarm_ui::~alarm_ui () {
    std::cout << "done" << std::endl;
}

bool alarm_ui::delete_event (GdkEventAny* event) {
    return false;
}

void alarm_ui::status_icon_activate_cb () {
    if (get_visible ()) {
        iconify ();
        hide ();
    } else {
        deiconify ();
        show();
    }
}

我想用状态图标显示我的窗口。切换窗口可见性,同时单击状态图标。代码编译得很好,但是当我执行二进制文件时,构造函数和析构函数就会被调用。如果我用这样的东西:

代码语言:javascript
复制
Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm." PACKAGE_ID);
    alarm_ui win(app);
    app->run (win);

这些窗口显示,but...as期望的,退出隐藏() command...any的想法?持有()和释放()是我唯一的选择吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-10 16:30:09

默认情况下,当应用程序的所有窗口都关闭(隐藏)时,Gtk::Application::run()返回。当窗口(win)在main()结束时超出作用域时,它将被销毁。

Gtk::Application::hold()和Application()确实是您所需要的。或者,在run()返回之后,您可以做任何您需要做的事情。我想这取决于你想做什么和什么时候。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29461531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档