我有一个使用Qt的C++程序,我想创建一个带有进度条的托盘通知。我认为Qt可以显示文本通知,但不能显示进度条 - 这是KDE特有的。我找不到任何在C++中管理KDE托盘通知的示例。有什么建议吗?
附:这就是我的意思:
附:这就是我的意思:
qdbusviewer
探索了kuiserver提供的API。我想展示与命令行工具qdbus
的交互示例,但我无法让它正常工作。如果您打算这样做,可能应该使用QDBus库。
对我们有趣的是org.kde.kuiserver
服务中的/JobViewServer
路径。我们要调用的方法是org.kde.JobViewServer.requestView
,它为此作业创建一个新的dbus路径,并返回它。例如,我只是使用虚拟参数调用了requestView
,并得到了ObjectPath: /JobViewServer/JobView_29
的返回值。同时,在托盘中开始旋转进度指示器:
现在,我可以使用该路径的内容。在这里,qdbus
可用,所以以下是方法列表:
$ qdbus org.kde.kuiserver /JobViewServer/JobView_29
signal void org.kde.JobViewV2.cancelRequested()
method Q_NOREPLY void org.kde.JobViewV2.clearDescriptionField(uint number)
signal void org.kde.JobViewV2.resumeRequested()
method bool org.kde.JobViewV2.setDescriptionField(uint number, QString name, QString value)
method Q_NOREPLY void org.kde.JobViewV2.setDestUrl(QDBusVariant destUrl)
method Q_NOREPLY void org.kde.JobViewV2.setInfoMessage(QString message)
method Q_NOREPLY void org.kde.JobViewV2.setPercent(uint percent)
method Q_NOREPLY void org.kde.JobViewV2.setProcessedAmount(qulonglong amount, QString unit)
method Q_NOREPLY void org.kde.JobViewV2.setSpeed(qulonglong bytesPerSecond)
method Q_NOREPLY void org.kde.JobViewV2.setSuspended(bool suspended)
method Q_NOREPLY void org.kde.JobViewV2.setTotalAmount(qulonglong amount, QString unit)
signal void org.kde.JobViewV2.suspendRequested()
method Q_NOREPLY void org.kde.JobViewV2.terminate(QString errorMessage)
method QDBusVariant org.freedesktop.DBus.Properties.Get(QString interface_name, QString property_name)
method QVariantMap org.freedesktop.DBus.Properties.GetAll(QString interface_name)
method void org.freedesktop.DBus.Properties.Set(QString interface_name, QString property_name, QDBusVariant value)
method QString org.freedesktop.DBus.Introspectable.Introspect()
method QString org.freedesktop.DBus.Peer.GetMachineId()
method void org.freedesktop.DBus.Peer.Ping()
我会让你猜测和尝试找出它们的作用,但是这里有一个小例子:
# Give it a name, in case we open the tooltip
qdbus org.kde.kuiserver /JobViewServer/JobView_29 setInfoMessage "Example progress"
# Update the progress
qdbus org.kde.kuiserver /JobViewServer/JobView_29 setPercent 50
# End it
qdbus org.kde.kuiserver /JobViewServer/JobView_29 terminate "Some error message"
你应该有足够的知识来在kde系统托盘中创建一个进度条。我希望这对你有所帮助。无论如何,我很高兴能找到这个方法(包括深入研究一些kde应用程序代码来了解进度通知是如何完成的),我可能会写一些使用这个方法的东西。
void QxtToolTip::show ( const QPoint & pos, QWidget * tooltip, QWidget * parent = 0, const QRect & rect = QRect() ) [static]
#include <QxtToolTip>
MyCustomWidget widget;
QPoint myPosition(x,y);
QxtToolTip::show ( &myPosition, &widget, parent);
如果想要在系统托盘中使用,您需要使用KStatusNotifierItem;如果想要进行通知,则需要查看KNotifications框架。