J'utilise Qt IDE afin de construire mon application afin de participer au concours Ubuntu Showdown. Dans ma candidature, j'ai fait ce qui suit:
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, fondamentalement, j'essaie de faire une entrée d'indicateur simple, qui, au clic, masquera l'indicateur et affichera l'application. L'indicateur peut être masqué avec succès en utilisant le truc PASSIF là-bas, mais, pendant les données d'appel-> show () ;, l'application se bloque.
Toute aide sur ce que je fais mal serait appréciée! Aussi, veuillez m'aider à corriger ce problème auquel je suis confronté (alternativement, je migrerai vers l'ancienne et bonne icône de la barre d'état (cela fonctionne très bien en 12.04, de toute façon) que je peux gérer très facilement et efficacement)
Réponses:
Vous ne devez pas utiliser libappindicator pour créer un indicateur d'application dans les programmes Qt. Il y a une meilleure façon!
Si vous avez installé sni -qt qui remplacera automatiquement les instances QSystemTrayIcon par le code de rendu de l'icône de la barre d'état en tant qu'élément de notification d' état KDE , que le service Indicateur d'application récupérera et affichera dans la barre de menus Ubuntu .
la source
Je dirais que vous essayez de passer le pointeur "this" comme un pointeur comme "* this" ici
à
la source