Прогресс панели задач KDE

Я пытаюсь показать прогресс на панели задач плазменного рабочего стола с помощью KDE Frameworks. Короче говоря, он хочет делать то же самое, что и дельфин, когда копирует файлы:

введите здесь описание изображения

Я как бы застрял, потому что я даже не знаю, с чего начать. Единственное, что я нашел полезным, это KStatusBarJobTracker, но я не знаю, как его использовать. Я не мог найти никаких руководств или примеров, как это сделать.


person Felix    schedule 09.05.2017    source источник


Ответы (2)


Правильно, так что, как оказалось, вы правы, в настоящее время для этого нет учебника. Этот запрос на обзорную доску, однако, показывает, как это было реализовано в KDevelop, и у вас должна быть возможность разобраться с этим :) https://git.reviewboard.kde.org/r/127050/

PS: то, что сейчас нет учебника, может быть хорошим способом для вас заскочить и помочь, написав для него небольшой самодостаточный учебник ... что, я уверен, будет очень приветствоваться :)

person leinir    schedule 09.05.2017
comment
Возможно, я создам для него репозиторий на github. - person Felix; 09.05.2017
comment
Однако я думаю, что это работает только для рабочего стола Ubuntu Unity? Я использую рабочий стол KDE Plasma - person Felix; 09.05.2017
comment
У меня теперь работает! Завтра я опубликую свой собственный ответ, показывающий полное решение. - person Felix; 10.05.2017
comment
Блестящий звонок, и я хотел бы передать благодарность от Эйке Хайна (которого вы, возможно, знаете как того парня, который недавно, после нескольких лет поддержки старого стека, переписал всю подсистему панели задач в Plasma 5) за это! :) - person leinir; 10.05.2017

Итак, покопавшись и благодаря помощи @leinir, я смог выяснить следующее:

  • Поскольку Plasma 5.6, KDE поддерживает Unitiy DBus Launcher-API, который можно использовать, например, для отображения прогресса
  • Я нашел сообщение на AskUbuntu, в котором объясняется, как использовать API с Qt

Настоящая проблема заключается в том, что это только работает, если у вас есть действительный файл рабочего стола в одном из стандартных мест! Вам нужно передать файл как параметр сообщения DBus, чтобы заставить его работать.

Основываясь на этой информации, я понял, как ее использовать, и создал репозиторий GitHub, поддерживающий кроссплатформенность. прогресс панели задач и использует этот API для реализации Linux.

Тем не менее, вот как это сделать в любом случае. Это должно работать для KDE Plasma и рабочего стола Unity, может быть, больше (другие не пробовал):

  1. Создайте файл .desktop для своего приложения. В целях тестирования это может быть «фиктивный» файл, который может выглядеть так:

    [Desktop Entry]
    Type=Application
    Version=1.1
    Name=MyApp
    Exec=<path_to>/MyApp
    
  2. Скопируйте этот файл в ~/.local/share/applications/ (или куда-нибудь в вашу систему, где находятся пользовательские файлы рабочего стола)

  3. В вашем коде все, что вам нужно сделать, это выполнить следующий код, чтобы обновить состояние панели задач:

    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
    QVariantMap properties;
    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"
            << properties;
    QDBusConnection::sessionBus().send(message);
    
  4. Скомпилируйте и запустите ваше приложение. Через десктоп файл запускать не надо, по крайней мере мне не нужно было. Если вы хотите быть уверены, что ваше приложение "подключено" к этому файлу на рабочем столе, просто установите собственный значок для файла. Ваше приложение должно отображать этот значок на панели задач.

И это в основном все. Примечание. Система запоминает последнее состояние при перезапуске приложения. Таким образом, вы должны сбросить все эти параметры один раз при запуске приложения.

person Felix    schedule 11.05.2017
comment
Вы знаете способ заставить это работать из скрипта bash? я совсем не разбираюсь в Qt - person MoralCode; 29.10.2018