C++ gtkmm状态图标在创建后退出

C++ gtkmm状态图标在创建后退出,c++,gtk,gtkmm,trayicon,C++,Gtk,Gtkmm,Trayicon,我必须创建一个简单的应用程序,在systray中显示一个图标和一个菜单,您可以从中执行一些操作。 问题是statusicon在创建后立即关闭。少了什么? 我放置睡眠以确保它被创建。systray中会出现3秒钟的内容,即使它不是我设置的图标 Init.cc #include <gtkmm/main.h> #include "Tray.h" int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); pri

我必须创建一个简单的应用程序,在systray中显示一个图标和一个菜单,您可以从中执行一些操作。 问题是statusicon在创建后立即关闭。少了什么? 我放置睡眠以确保它被创建。systray中会出现3秒钟的内容,即使它不是我设置的图标

Init.cc

#include <gtkmm/main.h>
#include "Tray.h"

int main(int argc, char *argv[]) {
    Gtk::Main kit(argc, argv);
    printf("Statuicon starting\n");
    Tray tray;
    printf("Statuicon started\n");
    return 0;
}
托盘.h

#ifndef GTKMM_TRAY_H
#define GTKMM_TRAY_H
#include <gtkmm.h>
#include <unistd.h>
using namespace std;

class Tray : public Gtk::StatusIcon {
    public:
        Tray();
        ~Tray();

    private:
        virtual void on_statusicon_popup(guint button, guint activate_time);
        virtual void on_statusicon_activated();
};

#endif //GTKMM_TRAY_H
\ifndef GTKMM\u托盘
#定义GTKMM_托盘_H
#包括
#包括
使用名称空间std;
类托盘:公共Gtk::状态图标{
公众:
托盘();
~Tray();
私人:
虚拟无效状态图标弹出窗口(吉尼特按钮、吉尼特激活时间);
_statusicon_activated()上的虚拟无效;
};
#endif//GTKMM\u托盘

您根本没有运行主循环,因此无法处理任何输入事件,程序在构建托盘后退出。您要做的是删除睡眠,然后在main()函数中,在返回之前添加以下行:

Gtk::Main::run();
然后,当您希望应用程序退出(通常是响应某种事件)时,调用

Gtk::Main::run();
Gtk::Main::quit();