В настоящее время нет специальной библиотеки для доступа к функциональности модуля запуска из Qt C ++. Есть библиотека libunity, но она сильно ориентирована на glib, поэтому относительно не подходит для Qt. Как упоминалось в другом ответе, наиболее удобный способ интеграции с модулем запуска - использовать низкоуровневый API-интерфейс dbus .
Основная концепция интеграции с модулем запуска заключается в отправке на модуль запуска сигнала с идентификатором приложения и набором свойств. Идентификатор приложения - это имя файла .desktop, обычно хранящегося в /usr/share/applications
:
//create the signal
QDBusMessage signal = QDBusMessage::createSignal("/",
"com.canonical.Unity.LauncherEntry", "Update");
//set the application ID
signal << "application://firefox.desktop";
//set the properties
QVariantMap properties;
...
signal << properties;
//send the signal
QDBusConnection::sessionBus().send(signal);
счетчик
Чтобы установить счетчик, вам нужно установить свойства так, чтобы счетчик был видимым, и дать ему желаемое целочисленное значение:
qint64 counter_value = 1;
properties["count-visible"] = true; //set the count to visible
properties["count"] = counter_value; //set the counter value
Индикатор
Чтобы установить индикатор выполнения, вам нужно установить свойства так, чтобы прогресс был видимым, и дать ему желаемое двойное значение:
double progress_value = 0.5;
properties["progress-visible"] = true; //set the progress bar to visible
properties["progress"] = progress_value; //set the progress value
Quicklist
Быстрый список можно настроить с помощью библиотеки Qbus dbusmenu. Вам нужно будет включить заголовочный файл:
#include <dbusmenuexporter.h>
Быстрый список создается как QMenu
меню в Qt. Это меню «экспортируется» через dbusmenu с помощью DBusMenuExporter
объекта. При экспорте вы даете этому объекту уникальный путь, а затем ссылаетесь на этот путь, чтобы указать элементу запуска, какое меню отображать в качестве быстрого списка.
В объявлении класса главного окна добавьте следующие переменные экземпляра:
QMenu *quicklist;
DBusMenuExporter *quicklist_exporter;
Затем в функции конструктора:
quicklist = new QMenu(this);
//exports the menu over dbus using the object: /com/me/myapp/quicklist
quicklist_exporter = new DBusMenuExporter("/com/me/myapp/quicklist", quicklist);
Чтобы добавить элементы в меню, используйте метод [addAction] (http: //qt-project.org/doc/qt-5.0/qtwidgets/qmenu.html#addAction) меню, чтобы добавить [QAction] (http: / /qt-project.org/doc/qt-5.0/qtwidgets/qaction.html) объекты.
Чтобы установить быстрый список значка запуска, установите свойство «быстрый список» для сигнала:
properties["quicklist"] = "/com/me/myapp/quicklist";
Настройка файла проекта
Вам нужно будет настроить файл .pro для добавления Dbus поддержки: QT += dbus
. Для сборки с поддержкой быстрого списка вам нужно установить библиотеки разработки dbusmenu-qt ( libdbusmenu*dev
). Затем вы можете добавить следующее в файл проекта, чтобы включить библиотеку dbusmenu:
#import the dbusmenu-qt library for quicklists
greaterThan(QT_MAJOR_VERSION, 4) {
INCLUDEPATH += /usr/include/dbusmenu-qt5/
LIBS += -ldbusmenu-qt5
} else {
INCLUDEPATH += /usr/include/dbusmenu-qt/
LIBS += -ldbusmenu-qt
}
Пример приложения
Чтобы увидеть полный пример использования всех функций запуска из Qt, посмотрите на этот проект Github .