J'essaie de développer un programme QT avec QT SDK. Hier, je lisais à propos de nity Launcher API sur le site Web officiel d'ubuntu. Mais il n'y a qu'un exemple pour Vala et python. Il est possible d'utiliser l'API Unity Launcher (listes rapides, compteurs et barres de progression) avec le langage C++ et, si possible, postez un exemple.
J'apprenais aussi Qt et j'ai essayé de trouver un moyen d'utiliser l'API Unity dans Qt. Je ne pouvais utiliser que l'API Dbus, mais pas de chance avec Quicklist car il nécessite un DbusMenu et je ne sais pas comment l'implémenter (j'apprends toujours :) ).
C'est l'exemple que j'ai créé pour moi-même et j'espère que c'est utile pour les autres. Peut-être que les développeurs de Unity peuvent aider à corriger/corriger/ajouter un nouveau code (liste rapide) :)
/*
Unity Launcher Dbus API exmable for Qt
foxoman [gplus.to/foxoman][[email protected]]
https://wiki.ubuntu.com/Unity/LauncherAPI#Low_level_DBus_API:_com.canonical.Unity.LauncherEntry
First step : add this line to your Qt project file .pro
QT += dbus
*/
/* I will run this example as Qt console apps */
#include <QtCore/QCoreApplication>
/* Include Qt Dbus required */
#include <QtDBus>
// Qt Main Method
int main(int argc, char *argv[])
{
/* Qt console Main Loop [ in GUI application the Main loop is QApplication ]
Unity API need Main Loop to run */
QCoreApplication a(argc, argv);
/* Create Qt Dbus Signal to send Dbus Message to unity Dbus API
signal com.canonical.Unity.LauncherEntry.Update (in s app_uri, in a{sv} properties)
*/
QDBusMessage signal = QDBusMessage::createSignal(
"/", /* Path */
"com.canonical.Unity.LauncherEntry", /* Unity DBus Interface */
"Update"); /* Update Signal */
/* app_uri
Desktop ID ex: firefox -> need to be pined in the launcher to see the effect
*/
signal << "application://firefox.desktop";
/* properties : A map of strings to variants with the properties to set on the launcher icon */
QVariantMap setProperty;
/* A number to display on the launcher icon */
setProperty.insert("count", qint64(80));
/* show count */
setProperty.insert("count-visible", true);
/* progress bar count must be float between 0 and 1 (mean from 0.00 to 0.100)*/
setProperty.insert("progress", double(0.80));
/* show progress bar */
setProperty.insert("progress-visible", true);
/* Tells the launcher to get the users attention */
setProperty.insert("urgent",true);
/* Pack the properties Map to the signal */
signal << setProperty;
/* Send the signal */
QDBusConnection::sessionBus().send(signal);
return a.exec();
}
téléchargez l'exemple ici http://ubuntuone.com/1SLDPcN9OhrU6LD1wgDs3r
Il n'existe actuellement aucune bibliothèque spécifique pour accéder aux fonctionnalités de lanceur à partir de Qt C++. Il y a une librairie de libunity mais elle est fortement orientée glib, elle est donc relativement inadaptée à Qt. Comme mentionné dans l’autre réponse, le moyen le plus pratique de s’intégrer au programme de lancement est d’utiliser la API de niveau bas dbus .
Le concept de base de l'intégration avec le programme de lancement consiste à envoyer un signal au programme de lancement avec un ID d'application et un ensemble de propriétés. L'ID d'application est le nom 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);
Pour définir le compteur, vous devez définir les propriétés de sorte que le compte soit visible et lui attribuer 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
Pour définir la barre de progression, vous devez définir les propriétés de sorte que la progression soit visible et lui attribuer 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
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 menu QMenu
dans Qt. Ce menu est "exporté" via dbusmenu à l'aide d'un objet DBusMenuExporter
. Lors de l'exportation, vous attribuez à cet objet un chemin unique, puis référencez ce chemin pour indiquer à l'élément de lancement quel menu afficher comme 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).
Pour définir la liste rapide de l'icône du lanceur, définissez la propriété 'quicklist' du signal:
properties["quicklist"] = "/com/me/myapp/quicklist";
Vous devrez configurer le fichier .pro pour ajouter le support dbus: QT += dbus
. Pour pouvoir créer un support avec la liste rapide, vous devez avoir installé les bibliothèques de développement dbusmenu-qt (libdbusmenu*dev
). Vous pouvez ensuite ajouter les éléments suivants 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
}
Pour voir un exemple complet utilisant toutes les fonctionnalités du lanceur de Qt, regardez ceci projet Github .