代码之家  ›  专栏  ›  技术社区  ›  Syco

gtkmm状态图标创建后退出

  •  1
  • Syco  · 技术社区  · 15 年前

    问题是statusicon在创建后立即关闭。少了什么? 我把睡眠,以确保它是创建的。在systray中出现3秒钟,即使它不是我设置的图标。

    初始化.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;
    }
    

    托盘.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!");
    }
    

    #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
    
    1 回复  |  直到 15 年前
        1
  •  3
  •   jonner    15 年前

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

    Gtk::Main::run();
    

    Gtk::Main::quit();
    
    推荐文章