現時点ではQt5はsni-qtでサポートされていないので、サポートする新しいリリースを待つか、this guideを使用してgtk +とlibappindicatorを使用してコードを作成する必要があります。さまざまな言語の例があります。 Since Qt5 also distributes GLib eventsを使用すると、統合がずっと簡単になります。最初にUnity上で実行しているかどうかを確認する必要があります(単一のものより多くのデスクトップをサポートするため)、XDG_CURRENT_DESKTOP環境変数を取得して行うことができ、Unityを返す場合はappindicatorを作成し、そうでなければQSystemTrayIconを作成します。アプリ・インジケータは、直接私たちは通常、公衆に変換され、デフォルトのQt「キーワード」の信号を未定義する必要があり、「信号」の名前を使用するので
#undefine signals
extern "C" {
#include <libappindicator/app-indicator.h>
#include <gtk/gtk.h>
}
#define signals public
:
まず、必要なヘッダファイルをインクルードする必要があります。次に、C++をコーディングするので、libappindicatorがC言語でコード化されているので、C++の名前マングリングを使用しないでextern "C"を使用する必要があります。
次は私たちが何であるかをデスクトップに基づいてAppIndicator/QSystemTrayIconを作成します。
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()));
}
最後に、我々はにextern「C」を使用する必要がある関数を宣言し、それからQtの信号を呼び出すためにプロキシ機能を作成しますしたがって、未定義の動作はありません。
今
extern "C" {
void quitIndicator(GtkMenu *, gpointer);
}
プロキシ機能:
void quitIndicator(GtkMenu *menu, gpointer data) {
Q_UNUSED(menu);
QApplication *self = static_cast<QApplication *>(data);
self->quit();
}
バージョンです:
それにQDialogで新しいプロジェクトを作成し、下図のように変更します。
Proファイルをそれ?あなたは最新バージョン(5.1.0-rc1)を試しましたか? – peppe