Ich verwende Qt IDE, um meine Anwendung zu erstellen und am Ubuntu Showdown-Wettbewerb teilzunehmen. In meiner Bewerbung habe ich Folgendes getan:
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));
}
Im Grunde versuche ich also, einen einfachen Indikatoreintrag zu erstellen, der beim Klicken den Indikator ausblendet und die Anwendung anzeigt. Der Indikator kann mit dem PASSIVE-Ding dort erfolgreich ausgeblendet werden, aber während des Aufrufs data-> show (); stürzt die Anwendung ab.
Jede Hilfe bei dem, was ich falsch mache, wäre dankbar! Bitte helfen Sie mir auch, dieses Problem zu beheben (alternativ werde ich auf das alte und gute Tray-Symbol migrieren (es funktioniert ohnehin in 12.04 einwandfrei), das ich sehr einfach und effizient behandeln kann).
Antworten:
Sie sollten libappindicator nicht zum Erstellen eines Anwendungsindikators in Qt-Programmen verwenden. Es gibt einen besseren Weg!
Wenn Sie sni-qt installiert haben, werden QSystemTrayIcon- Instanzen automatisch durch den Code zum Rendern dieses Taskleistensymbols als KDE-Statusbenachrichtigungselement ersetzt , das der Anwendungsindikatordienst aufnimmt und in der Ubuntu-Menüleiste anzeigt .
quelle
Ich würde sagen, Sie versuchen, den Zeiger "this" als Zeiger wie "* this" hier zu übergeben
zu
quelle