2010-08-23 112 views
1

我必须创建一个简单的应用程序,它在系统托盘中显示一个图标,并从中可以执行一些操作。 问题是创建后立即关闭了状态图标。少了什么东西? 我把睡觉,以确保它被创建。在系统托盘上出现3秒钟,即使它不是我设置的图标。gtkmm statusicon创建后退出

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; 
} 

Tray.cc

#include "Tray.h" 

Tray::Tray() { 
    set(Gtk::Stock::OK); 

    signal_activate().connect(sigc::mem_fun(*this, &Tray::on_statusicon_activated)); 
    signal_popup_menu().connect(sigc::mem_fun(*this, &Tray::on_statusicon_popup)); 

    set_visible(true); 

    printf("Statusicon created\n"); 

    sleep(3); 
} 

Tray::~Tray() {} 

void Tray::on_statusicon_popup(guint button, guint activate_time) { 
    printf("popup!"); 
} 

void Tray::on_statusicon_activated() { 
    printf("active!"); 
} 

Tray.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 

回答

3

你不运行的主循环可言,所以没有输入事件可被处理并且程序在构建托盘之后退出。你想要做什么是删除休眠,然后在你的main()函数,返回前添加以下行:

Gtk::Main::run(); 

然后,当你想退出该应用程序(通常在响应事件某种),请致电

Gtk::Main::quit();