C ++ 용 Unity Launcher API 읽었습니다 . 그러나 Vala와 python에

QT SDK를 사용하여 QT에서 일부 프로그램을 개발하려고합니다. 어제 공식 우분투 웹 사이트에서 Unity Launcher API 에 대해 읽었습니다 . 그러나 Vala와 python에 대해서만 예제가 있습니다. C ++ 언어로 Unity Launcher API (빠른 목록, 카운터 및 진행률 표시 줄)를 사용할 수 있으며 가능한 경우 예제를 게시하십시오.



답변

나는 또한 Qt를 배우고 Qt에서 Unity API를 사용하는 방법을 찾으려고했지만 Dbus API 만 사용할 수 있었지만 Quickbus는 DbusMenu가 필요하기 때문에 운이 좋지 않습니다. ).

이것은 내 자신을 위해 만든 예이며 다른 사람들에게 유용하기를 바랍니다. 어쩌면 Unity 개발자가 수정 / 수정 / 새 코드 추가 (빠른 목록) 🙂

/*
    Unity Launcher Dbus API exmable for Qt
    foxoman [gplus.to/foxoman][foxoman.u@gmail.com]

    https://wiki.ubuntu.com/Unity/LauncherAPI#Low_level_DBus_API:_com.canonical.Unity.LauncherEntry

    First step : add this line to your Qt project file .pro
     QT       += dbus
*/

/* I will run this example as Qt console apps */
#include <QtCore/QCoreApplication>

/* Include Qt Dbus required */
#include <QtDBus>

// Qt Main Method
int main(int argc, char *argv[])
{


    /* Qt console Main Loop [ in GUI application the Main loop is QApplication ]
        Unity API need Main Loop to run */
    QCoreApplication a(argc, argv);


    /* Create Qt Dbus Signal to send Dbus Message to unity Dbus API
        signal com.canonical.Unity.LauncherEntry.Update (in s app_uri, in a{sv} properties)
    */
    QDBusMessage signal = QDBusMessage::createSignal(
     "/", /* Path */
     "com.canonical.Unity.LauncherEntry", /* Unity DBus Interface */
     "Update"); /* Update Signal */


    /* app_uri
       Desktop ID ex: firefox -> need to be pined in the launcher to see the effect
    */
    signal << "application://firefox.desktop";


    /* properties : A map of strings to variants with the properties to set on the launcher icon */
    QVariantMap setProperty;

    /* A number to display on the launcher icon */
    setProperty.insert("count", qint64(80));

    /* show count */
    setProperty.insert("count-visible", true);

    /* progress bar count must be float between 0 and 1 (mean from 0.00 to 0.100)*/
    setProperty.insert("progress", double(0.80));

    /* show progress bar */
    setProperty.insert("progress-visible", true);

    /* Tells the launcher to get the users attention  */
    setProperty.insert("urgent",true);

    /* Pack the properties Map to the signal */
    signal << setProperty;

    /* Send the signal */
    QDBusConnection::sessionBus().send(signal);


    return a.exec();
}

여기에 예제를 다운로드하십시오
http://ubuntuone.com/1SLDPcN9OhrU6LD1wgDs3r


답변

Qt C ++에서 실행기 기능에 액세스하기위한 특정 라이브러리는 현재 없습니다. libunity 라이브러리가 있지만 이것은 glib 지향적이므로 Qt에 상대적으로 적합하지 않습니다. 다른 답변에서 언급했듯이 런처와 통합하는 가장 편리한 방법은 저수준 dbus API 를 사용하는 것 입니다.

런처와 통합하는 방법의 기본 개념은 애플리케이션 ID 및 특성 세트로 런처에 신호를 보내는 것입니다. 애플리케이션 ID는 .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

퀵리스트

퀵리스트는 dbusmenu Qt 라이브러리를 사용하여 설정할 수 있습니다. 헤더 파일을 포함해야합니다.

#include <dbusmenuexporter.h>

퀵리스트는 QMenuQt 에서 메뉴로 생성됩니다 . 이 메뉴는 DBusMenuExporter객체를 사용하여 dbusmenu를 통해 ‘내 보냅니다’ . 내보낼 때이 객체에 고유 한 경로를 지정한 다음 해당 경로를 참조하여 빠른 실행 목록으로 표시 할 메뉴를 실행기 항목에 알려줍니다.

기본 창 클래스 선언에서 다음 인스턴스 변수를 추가하십시오.

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) 개체

실행기 아이콘의 빠른 목록을 설정하려면 신호의 ‘quicklist’속성을 설정하십시오.

properties["quicklist"] = "/com/me/myapp/quicklist";

프로젝트 파일 구성

dbus 지원을 추가하려면 .pro 파일을 구성해야합니다 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 프로젝트를보십시오 .


답변