Question

Je dois créer une application simple qui affiche une icône dans le systray et un menu à partir duquel vous pouvez faire certaines opérations. le problème est que statusicon est fermé immédiatement après la création. Qu'est-ce qui manque? Je mets le sommeil pour vous assurer qu'il a été créé. pendant 3 secondes quelque chose apparaît dans systray, même si elle est pas l'icône que je jeu.

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
Était-ce utile?

La solution

Vous n'êtes pas en cours d'exécution d'une boucle principale du tout, donc pas d'événements d'entrée peuvent être traitées et les sorties du programme après la construction du plateau. Ce que vous voulez faire est de supprimer le sommeil, puis dans votre fonction main (), ajoutez la ligne suivante juste avant le retour:

Gtk::Main::run();

Ensuite, lorsque vous voulez que l'application à quitter (généralement en réponse à un événement de quelque sorte), appel

Gtk::Main::quit();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top