Obawiam się, że Qt5 nie jest obecnie obsługiwany przez sni-qt, więc albo musisz poczekać na nowe wydanie, które je obsługuje, albo zakodować je przy pomocy gtk + i libappindicator, używając this guide. Istnieją nawet przykłady różnych języków. Since Qt5 also distributes GLib events sprawia, że integracja jest o wiele łatwiejsza. Najpierw musisz dowiedzieć się, czy używasz Unity, czy nie (aby obsługiwać więcej komputerów niż tylko jedność), możesz to zrobić, pobierając zmienną środowiskową XDG_CURRENT_DESKTOP i jeśli zwróci Unity, utworzysz appindicator, w przeciwnym razie stwórz QSystemTrayIcon.
Najpierw trzeba to wymagane nagłówki:
#undefine signals
extern "C" {
#include <libappindicator/app-indicator.h>
#include <gtk/gtk.h>
}
#define signals public
Od app-wskaźnik wykorzystuje bezpośrednio „sygnały” Nazwa musimy undefine domyślny Qt sygnały „słów kluczowych”, które zazwyczaj przekłada się publicznie. Następnie, ponieważ kodujemy C++, a libappindicator jest kodowany w C, musimy użyć zewnętrznego "C", aby nie używać mangowania nazw C++.
Następny stworzyć AppIndicator/QSystemTrayIcon na podstawie tego co pulpicie jesteśmy na:
QString desktop;
bool is_unity;
desktop = getenv("XDG_CURRENT_DESKTOP");
is_unity = (desktop.toLower() == "unity");
if (is_unity) {
AppIndicator *indicator;
GtkWidget *menu, *item;
menu = gtk_menu_new();
item = gtk_menu_item_new_with_label("Quit");
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
g_signal_connect(item, "activate",
G_CALLBACK(quitIndicator), qApp); // We cannot connect
// gtk signal and qt slot so we need to create proxy
// function later on, we pass qApp pointer as an argument.
// This is useful when we need to call signals on "this"
//object so external function can access current object
gtk_widget_show(item);
indicator = app_indicator_new(
"unique-application-name",
"indicator-messages",
APP_INDICATOR_CATEGORY_APPLICATION_STATUS
);
app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE);
app_indicator_set_menu(indicator, GTK_MENU(menu));
} else {
QSystemTrayIcon *icon;
QMenu *m = new QMenu();
m->addAction(tr("Quit"), qApp, SLOT(quit()));
}
końcu tworzymy funkcję proxy, aby wywołać sygnał Qt od niego, aby zadeklarować funkcję musimy użyć extern „C” więc nie będzie żadnego niezdefiniowanego zachowania.
extern "C" {
void quitIndicator(GtkMenu *, gpointer);
}
Teraz funkcja proxy:
void quitIndicator(GtkMenu *menu, gpointer data) {
Q_UNUSED(menu);
QApplication *self = static_cast<QApplication *>(data);
self->quit();
}
Która wersja Qt jest że? Czy wypróbowałeś najnowszą wersję (5.1.0-rc1)? – peppe