QT SDKを使用してQTでプログラムを開発しようとしています。昨日、公式のubuntuウェブサイトで nity Launcher API について読んでいました。しかし、Valaとpythonのみの例があります。 Unity Launcher API(クイックリスト、カウンター、プログレスバー)をC++言語で使用することは可能です。可能であれば、例を投稿してください。
私はまたQtを学んでおり、QtでUnity APIを使用する方法を見つけようとしましたが、Dbus APIしか使用できませんでしたが、DbusMenuが必要であり、それを実装する方法がわからないため、クイックリストでは運がありません(まだ学習中です:) )。
これは自分のために作成した例であり、他の人にも役立つことを願っています。たぶんUnity開発者はそれに修正/修正/新しいコード(クイックリスト)を追加するのを助けることができます:)
/*
Unity Launcher Dbus API exmable for Qt
foxoman [gplus.to/foxoman][[email protected]]
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値を与える必要があります。
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>
クイックリストはQtのQMenu
メニューとして作成されます。このメニューは、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プロジェクト をご覧ください。