Obecnie nie ma określonej biblioteki umożliwiającej dostęp do funkcji uruchamiania z Qt C ++. Istnieje biblioteka lib libibility, ale jest zorientowana na glib, więc nie jest odpowiednia dla Qt. Jak wspomniano w drugiej odpowiedzi, najwygodniejszym sposobem integracji z programem uruchamiającym jest użycie niskopoziomowego interfejsu API dbus .
Podstawowa koncepcja integracji z programem uruchamiającym polega na wysłaniu sygnału do programu uruchamiającego z identyfikatorem aplikacji i zestawem właściwości. Identyfikator aplikacji to nazwa pliku .desktop, zwykle przechowywanego w /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);
Licznik
Aby ustawić licznik, musisz ustawić właściwości tak, aby liczba była widoczna i nadać jej pożądaną wartość całkowitą:
qint64 counter_value = 1;
properties["count-visible"] = true; //set the count to visible
properties["count"] = counter_value; //set the counter value
Pasek postępu
Aby ustawić pasek postępu, musisz ustawić właściwości tak, aby postęp był widoczny i nadać mu pożądaną podwójną wartość:
double progress_value = 0.5;
properties["progress-visible"] = true; //set the progress bar to visible
properties["progress"] = progress_value; //set the progress value
Szybka lista
Skróconą listę można ustawić za pomocą biblioteki dbusmenu Qt. Musisz dołączyć plik nagłówka:
#include <dbusmenuexporter.h>
Szybka lista jest tworzona jako QMenu
menu w Qt. To menu jest „eksportowane” przez dbusmenu za pomocą DBusMenuExporter
obiektu. Podczas eksportowania nadajesz temu obiektowi unikalną ścieżkę, a następnie odwołujesz się do tej ścieżki, aby powiedzieć elementowi uruchamiającemu, które menu wyświetlić jako szybką listę.
W deklaracji klasy okna głównego dodaj następujące zmienne instancji:
QMenu *quicklist;
DBusMenuExporter *quicklist_exporter;
Następnie w funkcji konstruktora:
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);
Aby dodać elementy do menu, użyj metody [addAction] (http: //qt-project.org/doc/qt-5.0/qtwidgets/qmenu.html#addAction) menu, aby dodać [QAction] (http: / /qt-project.org/doc/qt-5.0/qtwidgets/qaction.html) obiekty.
Aby ustawić szybką listę ikony programu uruchamiającego, ustaw właściwość sygnału „szybka lista”:
properties["quicklist"] = "/com/me/myapp/quicklist";
Konfigurowanie pliku projektu
Trzeba skonfigurować plik .pro dodać dbus wsparcia: QT += dbus
. Aby budować z obsługą szybkiej listy, musisz mieć libdbusmenu*dev
zainstalowane biblioteki programistyczne dbusmenu-qt ( ). Następnie możesz dodać do pliku projektu następujące elementy, aby uwzględnić bibliotekę 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
}
Przykład zastosowania
Aby zobaczyć pełny przykład z wykorzystaniem wszystkich funkcji uruchamiania z Qt, spójrz na ten projekt Github .