2017-05-09 3 views
0

J'essaie d'afficher une progression dans la barre des tâches du bureau plasma en utilisant les KDE Frameworks. Bref, il veut faire la même chose que les dauphins, quand il copie les fichiers:Progression de la barre des tâches de KDE

enter image description here

Je suis un peu coincé, parce que je ne sais même pas où commencer. La seule chose que j'ai trouvé qui pourrait être utile est KStatusBarJobTracker, mais je ne sais pas comment l'utiliser. Je n'ai pas trouvé de tutoriels ou d'exemples pour ce faire.

Répondre

1

À droite, alors que vous avez raison, il n'y a pas de tutoriel pour le moment. Cette demande de révision, cependant, montre comment elle a été implémentée dans KDevelop, et il devrait être possible pour vous de la résoudre :) https://git.reviewboard.kde.org/r/127050/

ps: qu'il n'y a pas de tutoriel maintenant pourrait être un bon moyen pour vous hop et aidez-moi, en écrivant un petit tutoriel autonome pour cela ... quelque chose que je suis sûr serait très bien accueilli :)

+0

Je vais probablement créer un référentiel github pour cela. – Felix

+0

Cependant, je pense que cela fonctionne pour le bureau Ubuntu Unity seulement? J'utilise le bureau KDE Plasma – Felix

+0

Je l'ai fonctionné maintenant! Je posterai ma propre réponse demain montrant la solution "complète". – Felix

2

Donc, après avoir creusé autour, et grâce à l'aide de @leinir, J'ai été en mesure de trouver ce qui suit:

  • Depuis Plasma 5.6 KDE supporte l'Unitiy DBus Launcher-API, qui peut être utilisé, par exemple, pour montrer la progression
  • J'ai trouvé un post sur AskUbuntu qui explique comment utiliser l'API avec Qt

Le vrai problème est le suivant: Ce seulement œuvres, si vous avez un fichier de bureau valide dans l'un des emplacements standard! Vous devez passer le fichier en paramètre du message DBus pour le faire fonctionner. Sur la base de ces informations, j'ai compris comment l'utiliser et créer un GitHub repository qui prend en charge la progression de la barre des tâches multiplateforme et utilise cette API pour l'implémentation Linux.

Cependant, voici comment le faire de toute façon. Il devrait fonctionner pour KDE Plasma et le bureau Unity, peut-être plus (ont pas essayé tous les autres):

  1. Créez un fichier .desktop pour votre application. Pour des fins de test, cela peut être un fichier « factice », qui pourrait ressembler à ceci:

    [Desktop Entry] 
    Type=Application 
    Version=1.1 
    Name=MyApp 
    Exec=<path_to>/MyApp 
    
  2. Copier ce fichier à ~/.local/share/applications/ (ou chaque fois que les fichiers de bureau spécifiques des utilisateurs vont sur votre système)

  3. En votre code, tout ce que vous devez faire est d'exécuter le code suivant, pour mettre à jour l'état barre des tâches:

    auto message = QDBusMessage::createSignal(QStringLiteral("/com/example/MyApp"), 
                  QStringLiteral("com.canonical.Unity.LauncherEntry"), 
                  QStringLiteral("Update")); 
    
    //you don't always have to specify all parameters, just the ones you want to update 
    properties.insert(QStringLiteral("progress-visible"), true);// enable the progress 
    properties.insert(QStringLiteral("progress"), 0.5);// set the progress value (from 0.0 to 1.0) 
    properties.insert(QStringLiteral("count-visible"), true);// display the "counter badge" 
    properties.insert(QStringLiteral("count"), 42);// set the counter value 
    
    message << QStringLiteral("application://myapp.desktop") //assuming you named the desktop file "myapp.desktop" 
         << params; 
    QDBusConnection::sessionBus().send(message); 
    
  4. compilez et exécutez votre application. Vous n'avez pas à le démarrer via le fichier de bureau, au moins je n'ai pas besoin de le faire. Si vous voulez être sûr que votre application est "connectée" à ce fichier de bureau, il suffit de définir une icône personnalisée pour le fichier. Votre application doit afficher cette icône dans la barre des tâches.

Et c'est fondamentalement ça. Remarque: Le système mémorise le dernier état lors du redémarrage de l'application.Ainsi, vous devriez réinitialiser tous ces paramètres une fois au démarrage de l'application.