C ++ 용 Unity Launcher API


10

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


Qt 언어 란 무엇입니까? QScript에 대해 이야기하고 있습니까, 아니면 C 또는 C ++ 예제를 요구하고 있습니까?
Javier Rivera

나는 이것에 대해 이야기하고있다 : qt.nokia.com/products를 많이 나는 Qt는 그냥 C ++을위한 프레임 워크 이해한다.
kv1dr

뿐만 아니라 파이썬을 포함한 많은 언어와 함께 사용할 수있는 완전한 라이브러리입니다. Qt를 사용하거나 다른 라이브러리가 중요하지 않은 경우 C ++ 예제를 요청한다는 것을 알고 있습니다. 명확하게 질문을 편집 할 수 있습니까?. : (BTW 유니티 2D Qt를 함께 만들어)
하비에르 리베라

그럼 ... 나는 C ++에 대한 예를 의미합니다 :)
kv1dr

답변:


6

나는 또한 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


C ++에 대한 경험이 없지만 libunity (#include <unity / unity / unity.h>)를 가져 와서 API를 사용하지 않는 이유는 무엇입니까?
Javier Rivera

고마워요 이것은 매력처럼 작동합니다 :) 모두를위한 경고 : 첫 번째 단계를 잊지 마십시오 (나처럼), 그렇지 않으면 이것이 작동하지 않습니다. :) (첫 번째 단계 :이 줄을 Qt 프로젝트 파일 .pro에 추가 QT += dbus)
kv1dr

@ JavierRivera : libunity를 가져 오려고했지만 unity.h를 찾지 못했습니다. 가져올 수있는 많은 라이브러리가 있지만 (자동 완성 기능에 따라) unity라는 라이브러리는 없습니다.
kv1dr

1
으악, libunity-dev를 설치하는 것을 잊었다. 그러나 지금 glib.h ( /usr/include/unity/unity/unity.h:7: error: glib.h: No such file or directory)에 또 다른 문제가 있지만 libglib2.0-dev설치했습니다.
kv1dr

2
@Javier Rivera : QLibrary 도움말과 함께 libunity를 사용하려고했지만 dbus api로 동일한 결과를 얻으려면 많은 노력이 필요합니다.
foxoman

4

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 프로젝트를보십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.