Прогресс панели задач KDE
Я пытаюсь показать прогресс в панели задач плазменного рабочего стола с помощью KDE Frameworks. Короче говоря, он хочет сделать то же самое, что и дельфин, когда копирует файлы:
Я немного застрял, потому что я даже не знаю, с чего начать. Единственное, что я нашел полезным, это KStatusBarJobTracker, но я не знаю, как его использовать. Я не мог найти учебники или примеры, как это сделать.
2 ответа
Правильно, так как выясняется, что вы правы, в настоящее время нет учебника для этого. Однако этот запрос на обзорную панель показывает, как он был реализован в KDevelop, и у вас должна быть возможность выполнить его через это:) https://git.reviewboard.kde.org/r/127050/
PS: то, что сейчас нет учебника, может быть хорошим способом помочь вам, написав небольшой, самостоятельный учебник для него... то, что я уверен, будет очень приветствоваться:)
Итак, покопавшись и благодаря помощи @leinir, я смог выяснить следующее:
- Начиная с Plasma 5.6 KDE поддерживает API-интерфейс Unitiy DBus Launcher, который можно использовать, например, для отображения прогресса
- Я нашел пост в AskUbuntu, который объясняет, как использовать API с Qt
Настоящая проблема: это работает, только если у вас есть действительный файл рабочего стола в одном из стандартных мест! Вам нужно передать файл как параметр сообщения DBus, чтобы он работал.
Основываясь на этой информации, я выяснил, как ее использовать, и создал репозиторий GitHub, который поддерживает работу с кроссплатформенными панелями задач и использует этот API для реализации linux.
Тем не менее, вот как это сделать в любом случае. Он должен работать для KDE Plasma и рабочего стола Unity, может быть, больше (не пробовал других):
Создать
.desktop
файл для вашего приложения. В целях тестирования это может быть "фиктивный" файл, который может выглядеть следующим образом:[Desktop Entry] Type=Application Version=1.1 Name=MyApp Exec=<path_to>/MyApp
Скопируйте этот файл в
~/.local/share/applications/
(или куда бы пользовательские файлы рабочего стола не заходили в вашу систему)В вашем коде все, что вам нужно сделать, это выполнить следующий код, чтобы обновить состояние панели задач:
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);
Скомпилируйте и запустите ваше приложение. Вам не нужно запускать его через файл рабочего стола, по крайней мере, мне это не нужно. Если вы хотите быть уверены, что ваше приложение "подключено" к этому файлу рабочего стола, просто установите специальный значок для этого файла. Ваше приложение должно показать этот значок на панели задач.
И это в основном это. Примечание. Система запоминает последнее состояние при перезапуске приложения. Таким образом, вы должны сбросить все эти параметры один раз при запуске приложения.