Como eu crio um indicador de trabalho com o Qt / C ++?

8

Estou usando o Qt IDE para criar meu aplicativo para participar do concurso Showdown do Ubuntu. Na minha inscrição, fiz o seguinte:

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));
}

Então, basicamente, estou tentando fazer uma entrada de indicador simples, que, ao clicar, ocultará o indicador e exibirá o aplicativo. O indicador pode ser escondido com sucesso usando o coisinha PASSIVA por lá, mas, durante os dados da chamada- > show () ;, o aplicativo trava.

Qualquer ajuda sobre o que estou fazendo de errado seria apreciada! Além disso, por favor, ajude-me a corrigir este problema que estou enfrentando (alternativamente, vou migrar para o antigo e bom ícone da bandeja (funciona bem em 12.04, de qualquer forma) que eu posso lidar com muito facilidade e eficiência)

    
por hytromo 01.07.2012 / 16:23

2 respostas

9

Você não deve usar libappindicator para criar um Indicador de Aplicação em programas Qt. Existe uma maneira melhor!

Se você tiver sni-qt instalado que substituirá automaticamente QSystemTrayIcon instâncias com o código para renderizar o ícone da bandeja como Item Notificador de Status do KDE , que o serviço Indicador de Aplicação pegará e mostrará no Barra de menus do Ubuntu .

    
por Ted Gould 03.07.2012 / 21:47
-1

Eu diria que você tenta passar o ponteiro "this" como um ponteiro como "* this" aqui

g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), this);

para

g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), *this);
    
por Hernantz 01.07.2012 / 16:48