Al momento non esiste una libreria specifica per l'accesso alla funzionalità di avvio da Qt C ++. C'è una libreria di libunità, ma questa è fortemente orientata verso gli glib, quindi è relativamente inadatta a Qt. Come menzionato nell'altra risposta, il modo più conveniente per integrarsi con il programma di avvio è utilizzare l' API dbus di basso livello .
Il concetto di base su come integrarsi con il programma di avvio è l'invio di un segnale al programma di avvio con un ID applicazione e un set di proprietà. L'ID applicazione è il nome del file .desktop, normalmente archiviato in /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);
contatore
Per impostare il contatore, dovrai impostare le proprietà in modo che il conteggio sia visibile e assegnargli il valore intero desiderato:
qint64 counter_value = 1;
properties["count-visible"] = true; //set the count to visible
properties["count"] = counter_value; //set the counter value
Barra di avanzamento
Per impostare la barra di avanzamento, dovrai impostare le proprietà in modo tale che l'avanzamento sia visibile e dargli il doppio valore desiderato:
double progress_value = 0.5;
properties["progress-visible"] = true; //set the progress bar to visible
properties["progress"] = progress_value; //set the progress value
Quicklist
La lista rapida può essere impostata usando la libreria Qt di dbusmenu. Dovrai includere il file di intestazione:
#include <dbusmenuexporter.h>
L'elenco rapido viene creato come QMenu
menu in Qt. Questo menu viene 'esportato' su dbusmenu usando un DBusMenuExporter
oggetto. Durante l'esportazione, si assegna a questo oggetto un percorso univoco e quindi si fa riferimento a quel percorso per indicare all'elemento di avvio quale menu visualizzare come elenco rapido.
Nella dichiarazione della classe della finestra principale, aggiungi le seguenti variabili di istanza:
QMenu *quicklist;
DBusMenuExporter *quicklist_exporter;
Quindi, nella funzione di costruzione:
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);
Per aggiungere elementi al menu, utilizzare il metodo [addAction] (http: //qt-project.org/doc/qt-5.0/qtwidgets/qmenu.html#addAction) del menu per aggiungere [QAction] (http: / /qt-project.org/doc/qt-5.0/qtwidgets/qaction.html) oggetti.
Per impostare la lista rapida dell'icona di avvio, imposta la proprietà 'lista rapida' del segnale:
properties["quicklist"] = "/com/me/myapp/quicklist";
Configurazione del file di progetto
Sarà necessario configurare il file .pro per aggiungere il supporto dbus: QT += dbus
. Per compilare con il supporto dell'elenco rapido, è necessario disporre delle librerie di sviluppo ( libdbusmenu*dev
) dbusmenu-qt installate. È quindi possibile aggiungere quanto segue al file di progetto per includere la libreria 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
}
Esempio di applicazione
Per vedere un esempio completo usando tutte le funzionalità di avvio di Qt, guarda questo progetto Github .