No momento, não existe uma biblioteca específica para acessar a funcionalidade do iniciador no Qt C ++. Existe uma biblioteca de comunidade, mas ela é bastante orientada, portanto é relativamente inadequada para o Qt. Conforme mencionado na outra resposta, a maneira mais conveniente de integrar-se ao iniciador é usar a API dbus de baixo nível .
O conceito básico de como integrar-se ao iniciador é enviar um sinal ao iniciador com um ID do aplicativo e um conjunto de propriedades. O ID do aplicativo é o nome do arquivo .desktop, normalmente armazenado em /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);
Contador
Para definir o contador, você precisará definir as propriedades para que a contagem fique visível e forneça o valor inteiro desejado:
qint64 counter_value = 1;
properties["count-visible"] = true; //set the count to visible
properties["count"] = counter_value; //set the counter value
Barra de progresso
Para definir a barra de progresso, você precisará definir as propriedades para que o progresso seja visível e forneça o valor duplo desejado:
double progress_value = 0.5;
properties["progress-visible"] = true; //set the progress bar to visible
properties["progress"] = progress_value; //set the progress value
Lista rápida
A lista rápida pode ser definida usando a biblioteca dbusmenu Qt. Você precisará incluir o arquivo de cabeçalho:
#include <dbusmenuexporter.h>
A lista rápida é criada como um QMenu
menu no Qt. Este menu é 'exportado' no dbusmenu usando um DBusMenuExporter
objeto. Ao exportar, você atribui a esse objeto um caminho único e, em seguida, faz referência a esse caminho para informar ao item do iniciador qual menu exibir como uma lista rápida.
Na sua declaração de classe da janela principal, adicione as seguintes variáveis de instância:
QMenu *quicklist;
DBusMenuExporter *quicklist_exporter;
Então, na função construtora:
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);
Para adicionar itens ao menu, use o método [addAction] (http: //qt-project.org/doc/qt-5.0/qtwidgets/qmenu.html#addAction) do menu para adicionar [QAction] (http: / /qt-project.org/doc/qt-5.0/qtwidgets/qaction.html).
Para definir a lista rápida do ícone do iniciador, defina a propriedade 'lista rápida' do sinal:
properties["quicklist"] = "/com/me/myapp/quicklist";
Configurando o arquivo de projeto
Você precisará configurar o arquivo .pro para adicionar suporte dbus: QT += dbus
. Para criar com o suporte da lista rápida, você precisará ter as bibliotecas de desenvolvimento dbusmenu-qt ( libdbusmenu*dev
) instaladas. Você pode adicionar o seguinte ao arquivo do projeto para incluir a biblioteca 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
}
Exemplo de aplicação
Para ver um exemplo completo usando toda a funcionalidade do iniciador do Qt, veja este projeto do Github .