KDE 任务栏进度
KDE Taskbar Progress
我正在尝试使用 KDE 框架在 Plasma 桌面的任务栏中显示进度。简而言之,当它复制文件时,它想做与 dolphin 相同的事情:
我有点卡住了,因为我什至不知道从哪里开始。我发现唯一有用的是 KStatusBarJobTracker,但我不知道如何使用它。我找不到任何教程或示例如何执行此操作。
对,事实证明你是对的,目前没有这方面的教程。然而,这个审查委员会的请求显示了它是如何在 KDevelop 中实现的,你应该可以通过它来解决它:) https://git.reviewboard.kde.org/r/127050/
ps:现在没有教程可能是您加入并提供帮助的好方法,为此编写一个小的、独立的教程……我相信会的非常欢迎:)
所以,在四处挖掘之后,感谢@leinir 的帮助,我能够找到以下内容:
- 自从 Plasma 5.6 KDE 支持 Unitiy DBus Launcher-API,可以用来显示进度等
- 我在 AskUbuntu 上找到了一篇 post,它解释了如何将 API 与 Qt
一起使用
真正的问题是:这 仅 有效,如果您在标准位置之一有一个有效的桌面文件!您需要将文件作为 DBus 消息的参数传递才能使其正常工作。
根据这些信息,我弄清楚了如何使用它并创建了一个 GitHub repository,它支持跨平台任务栏进度,并将此 API 用于 linux 实现。
但是,无论如何,这里是如何做的。它应该适用于 KDE Plasma 和 Unity 桌面,也许更多(没有尝试过其他任何东西):
为您的应用程序创建一个 .desktop
文件。出于测试目的,这可以是一个 "dummy" 文件,看起来像这样:
[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
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);
编译并运行您的应用程序。您不必通过桌面文件启动它,至少我不需要。如果您想确保您的应用程序是 "connected" 该桌面文件,只需为该文件设置一个自定义图标。您的应用程序应在任务栏中显示该图标。
基本上就是这样。 注意:系统会记住重启应用程序时的最后状态。因此,您应该在启动应用程序时重新设置所有这些参数。
我正在尝试使用 KDE 框架在 Plasma 桌面的任务栏中显示进度。简而言之,当它复制文件时,它想做与 dolphin 相同的事情:
我有点卡住了,因为我什至不知道从哪里开始。我发现唯一有用的是 KStatusBarJobTracker,但我不知道如何使用它。我找不到任何教程或示例如何执行此操作。
对,事实证明你是对的,目前没有这方面的教程。然而,这个审查委员会的请求显示了它是如何在 KDevelop 中实现的,你应该可以通过它来解决它:) https://git.reviewboard.kde.org/r/127050/
ps:现在没有教程可能是您加入并提供帮助的好方法,为此编写一个小的、独立的教程……我相信会的非常欢迎:)
所以,在四处挖掘之后,感谢@leinir 的帮助,我能够找到以下内容:
- 自从 Plasma 5.6 KDE 支持 Unitiy DBus Launcher-API,可以用来显示进度等
- 我在 AskUbuntu 上找到了一篇 post,它解释了如何将 API 与 Qt 一起使用
真正的问题是:这 仅 有效,如果您在标准位置之一有一个有效的桌面文件!您需要将文件作为 DBus 消息的参数传递才能使其正常工作。
根据这些信息,我弄清楚了如何使用它并创建了一个 GitHub repository,它支持跨平台任务栏进度,并将此 API 用于 linux 实现。
但是,无论如何,这里是如何做的。它应该适用于 KDE Plasma 和 Unity 桌面,也许更多(没有尝试过其他任何东西):
为您的应用程序创建一个
.desktop
文件。出于测试目的,这可以是一个 "dummy" 文件,看起来像这样:[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 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);
编译并运行您的应用程序。您不必通过桌面文件启动它,至少我不需要。如果您想确保您的应用程序是 "connected" 该桌面文件,只需为该文件设置一个自定义图标。您的应用程序应在任务栏中显示该图标。
基本上就是这样。 注意:系统会记住重启应用程序时的最后状态。因此,您应该在启动应用程序时重新设置所有这些参数。