web-dev-qa-db-fra.com

Comment créer un indicateur de travail avec Qt / C ++?

J'utilise Qt IDE pour créer mon application et participer au concours Ubuntu Showdown. Dans ma candidature, j'ai effectué les tâches suivantes:

void show_app(MainWindow *data)
{
    //this works fine:
    app_indicator_set_status(appindicator, APP_INDICATOR_STATUS_PASSIVE);
    //this crashes the application:
    data->show();
}


void MainWindow::make_indicator()
{
    if(appindicator){
        //appindicator has already been created
        return;
    }
    appindicator = app_indicator_new("Format Junkie Indicator", "formatjunkie", APP_INDICATOR_CATEGORY_APPLICATION_STATUS);
    GtkWidget* showapp_option;
    GtkWidget* indicatormenu = gtk_menu_new();
    GtkWidget* item = gtk_menu_item_new_with_label("Format Junkie main menu");
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), indicatormenu);

    showapp_option = gtk_menu_item_new_with_label("Show App!");
    g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), this);
    gtk_menu_Shell_append(GTK_MENU_Shell(indicatormenu), showapp_option);

    gtk_widget_show_all(indicatormenu);
    app_indicator_set_status(appindicator, APP_INDICATOR_STATUS_ACTIVE);
    app_indicator_set_attention_icon(appindicator, "dialog-warning");

    app_indicator_set_menu(appindicator, GTK_MENU (indicatormenu));
}

Donc, en gros, j'essaie de faire une simple entrée d'indicateur qui, au clic, cachera l'indicateur et affichera l'application. L’indicateur peut être masqué avec succès à l’aide du composant PASSIVE, mais lors de l’appel data-> show ();, l’application se bloque.

Toute aide sur ce que je fais mal serait appréciée! Aidez-moi également à corriger le problème auquel je suis confronté (sinon, je migrerai vers l’ancienne et bonne icône de barre des tâches (cela fonctionne très bien dans 12.04, de toute façon) que je peux gérer très facilement et efficacement)

8
hytromo

Vous ne devriez pas utiliser libappindicator pour créer un indicateur d'application dans les programmes Qt. Il y a un meilleur moyen!

Si vous avez sni-qt installé, il remplacera automatiquement les instances de QSystemTrayIcon par le code permettant de rendre cette icône de la barre des tâches sous la forme d'un élément KDE Status Notifier , dont l'indicateur d'application le service sera récupéré et affiché dans la barre de menus Ubuntu .

9
Ted Gould