Ubuntu Showdown 공모전에 참여하기 위해 응용 프로그램을 빌드하기 위해 Qt IDE를 사용하고 있습니다. 내 응용 프로그램에서 다음을 수행했습니다.
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에서 잘 작동합니다)으로 매우 쉽고 효율적으로 처리 할 수 있습니다)
답변
Qt 프로그램에서 어플리케이션 인디케이터를 작성하기 위해 libappindicator 를 사용해서는 안됩니다 . 더 좋은 방법이 있습니다!
당신이있는 경우 SNI를-Qt는 그것이 자동적으로 대체합니다 설치 QSystemTrayIcon의 A와 그 트레이 아이콘을 렌더링하기위한 코드 인스턴스를 KDE 항목 알리미 상태 1, 응용 프로그램 표시 에서 서비스가 데리러와 쇼 우분투 메뉴 모음 .
답변
“this”포인터를 “* this”와 같은 포인터로 전달하려고합니다.
g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), this);
에
g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), *this);