Как мне создать рабочий индикатор с Qt / C ++?

Я использую 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), с которым я могу справиться очень легко и эффективно)

8
задан 3 July 2012 в 23:50

2 ответа

Вы не должны использовать libappindicator для создания Индикатора приложения в спокойных программах. Существует лучший путь!

Если Вам установили sni-qt, который автоволшебно заменит экземпляры QSystemTrayIcon кодом для рендеринга того значка панели задач как Состояние KDE Объект Notifier, который сервис Индикатора приложения возьмет и покажет в строке меню Ubuntu.

9
ответ дан 3 July 2012 в 23:50

Я бы сказал, что вы пытаетесь передать указатель «this» как указатель типа «* this» здесь

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

-

g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), *this);
0
ответ дан 3 July 2012 в 23:50

Другие вопросы по тегам:

Похожие вопросы: