Il n'existe pas actuellement de bibliothèque spécifique pour accéder aux fonctionnalités du lanceur à partir de Qt C ++. Il existe une bibliothèque de libunity mais elle est fortement orientée glib et est donc relativement peu adaptée à Qt. Comme mentionné dans l'autre réponse, la façon la plus pratique de s'intégrer au lanceur est d'utiliser l' API dbus de bas niveau .
Le concept de base de l'intégration avec le lanceur est d'envoyer un signal au lanceur avec un ID d'application et un ensemble de propriétés. L'ID d'application est le nom de fichier du fichier .desktop, normalement stocké dans /usr/share/applications
:
//create the signal
QDBusMessage signal = QDBusMessage::createSignal("/",
"com.canonical.Unity.LauncherEntry", "Update");
//set the application ID
signal << "application://firefox.desktop";
//set the properties
QVariantMap properties;
...
signal << properties;
//send the signal
QDBusConnection::sessionBus().send(signal);
Compteur
Pour définir le compteur, vous devrez définir les propriétés de sorte que le nombre soit visible et lui donner la valeur entière souhaitée:
qint64 counter_value = 1;
properties["count-visible"] = true; //set the count to visible
properties["count"] = counter_value; //set the counter value
Barre de progression
Pour définir la barre de progression, vous devrez définir les propriétés de manière à ce que la progression soit visible et lui donner la valeur double souhaitée:
double progress_value = 0.5;
properties["progress-visible"] = true; //set the progress bar to visible
properties["progress"] = progress_value; //set the progress value
Liste rapide
La liste rapide peut être définie à l'aide de la bibliothèque dbusmenu Qt. Vous devrez inclure le fichier d'en-tête:
#include <dbusmenuexporter.h>
La liste rapide est créée sous forme de QMenu
menu dans Qt. Ce menu est «exporté» via dbusmenu à l'aide d'un DBusMenuExporter
objet. Lors de l'exportation, vous donnez à cet objet un chemin unique, puis référencez ce chemin pour indiquer à l'élément du lanceur le menu à afficher sous forme de liste rapide.
Dans votre déclaration de classe de fenêtre principale, ajoutez les variables d'instance suivantes:
QMenu *quicklist;
DBusMenuExporter *quicklist_exporter;
Ensuite, dans la fonction constructeur:
quicklist = new QMenu(this);
//exports the menu over dbus using the object: /com/me/myapp/quicklist
quicklist_exporter = new DBusMenuExporter("/com/me/myapp/quicklist", quicklist);
Pour ajouter des éléments au menu, utilisez la méthode [addAction] (http: //qt-project.org/doc/qt-5.0/qtwidgets/qmenu.html#addAction) du menu pour ajouter [QAction] (http: / /qt-project.org/doc/qt-5.0/qtwidgets/qaction.html) objets.
Pour définir la liste rapide de l'icône du lanceur, définissez la propriété «liste rapide» du signal:
properties["quicklist"] = "/com/me/myapp/quicklist";
Configuration du fichier de projet
Vous devrez configurer le fichier .pro pour ajouter le support dbus: QT += dbus
. Pour construire avec la prise en charge de la liste rapide, vous devrez installer les bibliothèques de développement dbusmenu-qt ( libdbusmenu*dev
). Vous pouvez ensuite ajouter ce qui suit au fichier de projet pour inclure la bibliothèque dbusmenu:
#import the dbusmenu-qt library for quicklists
greaterThan(QT_MAJOR_VERSION, 4) {
INCLUDEPATH += /usr/include/dbusmenu-qt5/
LIBS += -ldbusmenu-qt5
} else {
INCLUDEPATH += /usr/include/dbusmenu-qt/
LIBS += -ldbusmenu-qt
}
Exemple d'application
Pour voir un exemple complet utilisant toutes les fonctionnalités du lanceur de Qt, regardez ce projet Github .