UnityランチャーAPI for C ++


10

QT SDKを使用してQTでいくつかのプログラムを開発しようとしています。昨日、ubuntuの公式ウェブサイトでUnity Launcher APIについて読んでいました。しかし、Valaとpythonのみの例があります。Unity Launcher API(クイックリスト、カウンター、プログレスバー)をC ++言語で使用できます。可能であれば、例を投稿してください。


Qt言語とは何ですか?QScriptについて話しているのですか、それともCまたはC ++の例を求めているだけですか?
ハビエルリベラ

私はこれについて話しています:qt.nokia.com/products Qtは単なるC ++のフレームワークです。
kv1dr

だけでなく、Pythonを含む多くの言語で使用できる完全なライブラリです。Qtや他のライブラリを使用しても問題ない場合は、C ++の例を求めているとのことですが、質問を編集して明確にすることはできますか?(ところで、Unity 2DはQtで作られています)
Javier Rivera

では、C ++の例を示します:)
kv1dr

回答:


6

私はQtも学習していて、QtでUnity APIを使用する方法を見つけようとしましたが、Dbus APIしか使用できませんでしたが、DbusMenuが必要であり、それを実装する方法がわからないため、Quicklistでは運がありません(まだ学習中:) )。

これは私が自分のために作成した例であり、他の人にも役立つことを願っています。多分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:自由をインポートしようとしましたが、unity.hが見つかりません。(オートコンプリート機能により)インポートできるライブラリはたくさんありますが、unityという名前のライブラリはありません。
kv1dr 2010

1
おっと、私はlibunity-devをインストールするのを忘れました。しかし今、glib.h(/usr/include/unity/unity/unity.h:7: error: glib.h: No such file or directory)には別の問題がありますが、libglib2.0-devインストールしました。
kv1dr 2010年

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値を設定する必要があります。

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.