C ++ के लिए एकता लॉन्चर API


10

मैं क्यूटी एसडीके के साथ क्यूटी में कुछ कार्यक्रम विकसित करने की कोशिश कर रहा हूं। कल मैं आधिकारिक ubuntu वेबसाइट पर यूनिटी लॉन्चर एपीआई के बारे में पढ़ रहा था । लेकिन केवल वेला और अजगर के लिए उदाहरण है। C ++ भाषा के साथ यूनिटी लॉन्चर API (क्विकलिस्ट्स, काउंटर्स और प्रोग्रेस बार) का उपयोग करना संभव है और यदि यह संभव है, तो कृपया एक उदाहरण पोस्ट करें।


वह Qt भाषा क्या है? क्या आप क्यूस्क्रिप्ट के बारे में बात कर रहे हैं या आप केवल C या C ++ उदाहरण के लिए पूछ रहे हैं?
जेवियर रिवेरा

मैं इस बारे में बात कर रहा हूं: qt.nokia.com/products जितना मैं समझता हूं कि Qt C ++ के लिए सिर्फ एक ढांचा है।
kv1dr

इतना ही नहीं, यह एक पूर्ण पुस्तकालय है जिसका उपयोग भाषाओं के भार के साथ किया जा सकता है, जिसमें पायथन भी शामिल है। मैं समझता हूं कि आप C ++ उदाहरण के लिए पूछ रहे हैं, यदि आप Qt का उपयोग करते हैं या कोई अन्य लाइब्रेरी मायने नहीं रखती है। क्या आप इसे स्पष्ट करने के लिए प्रश्न को संपादित कर सकते हैं? (BTW: एकता 2D क्यूटी के साथ बनाया गया है),
जेवियर रिवेरा

ठीक है ... मेरा मतलब है कि C ++ :) के लिए एक उदाहरण है
kv1dr

जवाबों:


6

मैं क्यूटी भी सीख रहा हूँ और क्यूटी में एकता एपीआई का उपयोग करने का एक तरीका खोजने की कोशिश की, मैं केवल Dbus API का उपयोग कर सकता हूं, लेकिन क्विकलिस्ट के साथ कोई भाग्य नहीं है क्योंकि इसे DbusMenu की आवश्यकता है और मुझे नहीं पता कि इसे कैसे लागू करना है (अभी भी सीखना :) )।

यह वह उदाहरण है जिसे मैंने अपने स्वयं के लिए बनाया है और मुझे आशा है कि यह दूसरों के लिए उपयोगी है। हो सकता है कि एकता देव इसे ठीक करने / नया कोड (क्विकलिस्ट) जोड़ने में मदद कर सकें :)

/*
    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>) का आयात क्यों नहीं करते हैं और एपीआई का उपयोग करते हैं?
जेवियर रिवेरा

शुक्रिया लोमड़ी वाला। यह एक आकर्षण की तरह काम करता है :) हर किसी के लिए चेतावनी: पहला कदम मत भूलना (जैसे मैंने किया), अन्यथा यह काम नहीं करेगा। :) (पहला कदम: अपनी Qt प्रोजेक्ट फ़ाइल .pro में इस लाइन को जोड़ें QT += dbus)
kv1dr

@ जेवियररिवा: मैंने कामेच्छा बढ़ाने की कोशिश की, लेकिन इससे एकता नहीं मिली। एक टन पुस्तकालय है जिसे मैं आयात कर सकता हूं (स्वतः पूर्ण कार्य के अनुसार), लेकिन एकता नाम की कोई लाइब्रेरी नहीं है।
kv1dr

1
whoops, मैं libunity- देव स्थापित करना भूल गया। लेकिन अब, glib.h ( /usr/include/unity/unity/unity.h:7: error: glib.h: No such file or directory) के साथ एक और समस्या है , लेकिन मैंने libglib2.0-devस्थापित किया है।
kv1dr

2
@ जेवियर रिवेरा: मैंने क्यूबिल्ट्स की मदद से कामेच्छा का उपयोग करने की कोशिश की, लेकिन डबस अपी के साथ उसी परिणाम तक पहुंचने के लिए बहुत प्रयास करना पड़ा।
लोमड़ी

4

वर्तमान में Qt C ++ से लॉन्चर की कार्यक्षमता तक पहुँचने के लिए एक विशिष्ट पुस्तकालय नहीं है। लिबुनिटी लाइब्रेरी है, लेकिन यह बहुत ही शानदार है, इसलिए यह अपेक्षाकृत क्यूटी के लिए अनुपयुक्त है। जैसा कि अन्य उत्तर में उल्लेख किया गया है, लांचर का उपयोग करने के लिए सबसे सुविधाजनक तरीका है निम्न स्तर के डबस एपीआई है

लॉन्चर को कैसे एकीकृत किया जाए इसकी मूल अवधारणा है कि क्या आप लॉन्चर को एप्लिकेशन आईडी और गुणों के एक सेट के साथ सिग्नल भेजते हैं। एप्लिकेशन आईडी .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 में एक मेनू के रूप में बनाया गया है। यह मेनू एक का उपयोग करके dbusmenu पर 'निर्यात' हैDBusMenuExporter ऑब्जेक्ट । निर्यात करते समय, आप इस ऑब्जेक्ट को एक अनोखा पथ देते हैं और फिर उस पथ को लॉन्चर आइटम को बताने के लिए संदर्भित करते हैं, जो मेनू में क्विकलिस्ट के रूप में प्रदर्शित होता है।

अपने मुख्य विंडो क्लास घोषणा में, निम्न उदाहरण चर जोड़ें:

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);

मेनू में आइटम जोड़ने के लिए, [QAction] (http: / /qt-project.org/doc/qt-5.0/qtwidgets/qaction.html) ऑब्जेक्ट।

लॉन्चर आइकन की क्विकलिस्ट सेट करने के लिए, सिग्नल की 'क्विकलिस्ट' संपत्ति सेट करें:

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 प्रोजेक्ट को देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.