KDE任务栏进度

时间:2017-05-09 16:34:34

标签: qt progress-bar taskbar kde kde-plasma

我正在尝试使用KDE框架在等离子桌面的任务栏中显示进度。简而言之,当它复制文件时,它想要与dolphin做同样的事情:

enter image description here

我有点卡住,因为我甚至不知道从哪里开始。我发现唯一有用的是KStatusBarJobTracker,但我不知道如何使用它。我找不到任何教程或示例如何做到这一点。

2 个答案:

答案 0 :(得分:4)

所以,经过挖掘,并感谢@leinir的帮助,我能够找到以下内容:

  • 由于Plasma 5.6 KDE支持Unitiy DBus Launcher-API,例如可用于显示进度
  • 我在AskUbuntu上发现了一条帖子,解释了如何在Qt
  • 中使用API

真正的问题是:如果您在其中一个标准位置拥有有效的桌面文件,则此有效!您需要将该文件作为DBus消息的参数传递,以使其正常工作。

根据这些信息,我想出了如何使用它并创建了一个支持跨平台任务栏进度的GitHub repository,并将此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
    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. 编译并运行您的应用程序。你不必通过桌面文件启动它,至少我不需要。如果你想确定你的应用程序已连接&#34;到该桌面文件,只需为该文件设置自定义图标。您的应用程序应在任务栏中显示该图标。

  5. 基本上就是这样。 注意:系统会在重新启动应用程序时记住上次状态。因此,您应该在启动应用程序时重置所有这些参数。

答案 1 :(得分:2)

是的,所以事实证明你是对的,目前还没有这方面的教程。然而,这个评审板请求显示了它是如何在KDevelop中实现的,你应该可以通过它来实现:) https://git.reviewboard.kde.org/r/127050/

ps:现在没有教程可能是一个很好的方式,你可以通过写一个小的,自包含的教程来帮助你跳进去帮助...我肯定会非常欢迎:)