![如何使用 Qt/C++ 创建工作指标?](https://linux22.com/image/1038925/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Qt%2FC%2B%2B%20%E5%88%9B%E5%BB%BA%E5%B7%A5%E4%BD%9C%E6%8C%87%E6%A0%87%EF%BC%9F.png)
我正在使用 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 中运行良好),我可以轻松高效地处理它)
答案1
你不应该使用libappindicator用于在 Qt 程序中创建应用程序指示器。有更好的方法!
如果你有sni-qt安装后将自动替换系统托盘图标实例,其中包含用于将该托盘图标渲染为KDE 状态通知程序项,其中应用指标服务将接机并展示在Ubuntu 菜单栏。
答案2
我想说你尝试将“this”指针作为“*this”这样的指针传递
g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), this);
到
g_signal_connect(showapp_option, "activate", G_CALLBACK(show_app), *this);