QT SDK를 사용하여 QT에서 일부 프로그램을 개발하려고합니다. 어제 공식 우분투 웹 사이트에서 Unity Launcher API 에 대해 읽었습니다 . 그러나 Vala와 python에 대해서만 예제가 있습니다. C ++ 언어로 Unity Launcher API (빠른 목록, 카운터 및 진행률 표시 줄)를 사용할 수 있으며 가능한 경우 예제를 게시하십시오.
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 += dbus
)
/usr/include/unity/unity/unity.h:7: error: glib.h: No such file or directory
)에 또 다른 문제가 있지만 libglib2.0-dev
설치했습니다.
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>
퀵리스트는 QMenu
Qt 에서 메뉴로 생성됩니다 . 이 메뉴는 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 프로젝트를보십시오 .