Я использую Qt IDE для создания своего приложения, чтобы участвовать в конкурсе Ubuntu Showdown. В моем приложении я сделал следующее:
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));
}
Итак, в основном я пытаюсь сделать простую запись индикатора, которая, при нажатии, будет скрывать индикатор и отображать приложение. Индикатор может быть успешно скрыт с помощью PASSIVE, но во время вызова data-> show (); приложение вылетает.
Буду признателен за любую помощь в том, что я делаю неправильно! Также, пожалуйста, помогите мне исправить эту проблему, с которой я сталкиваюсь (в качестве альтернативы я перейду к старому и хорошему значку в трее (в любом случае он отлично работает в 12.04), с которым я могу справиться очень легко и эффективно)
Ответы:
Вы не должны использовать libappindicator для создания индикатора приложения в программах Qt. Есть лучший способ!
Если у вас установлен sni-qt, который автоматически заменит экземпляры QSystemTrayIcon кодом для рендеринга этого значка в трее как элемента уведомлений о состоянии KDE , который сервис Application Indicator подберет и отобразит в строке меню Ubuntu .
источник
Я бы сказал, что вы пытаетесь передать указатель "this" как указатель типа "* this" здесь
в
источник