সি ++ এর জন্য ইউনিটি লঞ্চার এপিআই


10

আমি কিউটি এসডিকে দিয়ে কিউটিতে কিছু প্রোগ্রাম বিকাশের চেষ্টা করছি। গতকাল আমি সরকারী উবুন্টু ওয়েবসাইটে ইউনিটি লঞ্চার এপিআই সম্পর্কে পড়ছিলাম । তবে কেবল ভালা এবং অজগরর জন্য উদাহরণ রয়েছে। সি ++ ভাষার সাথে ইউনিটি লঞ্চার এপিআই (কুইললিস্ট, কাউন্টার এবং প্রগতি বার) ব্যবহার করা সম্ভব এবং যদি এটি সম্ভব হয় তবে দয়া করে একটি উদাহরণ পোস্ট করুন।


কি কিউটি ভাষা ?. আপনি কি কিউস্ক্রিপ্টের কথা বলছেন বা আপনি কেবল সি বা সি ++ উদাহরণ চাইছেন?
জাভিয়ের রিভেরা

আমি এটি সম্পর্কে কথা বলছি: qt.nokia.com / প্রোডাক্টগুলি যতটা আমি বুঝতে পেরেছি Qt কেবল সি ++ এর জন্য একটি কাঠামো।
কেভি

শুধু নয়, এটি একটি সম্পূর্ণ লাইব্রেরি যা পাইথন সহ অনেকগুলি ভাষা ব্যবহার করা যায়। আমি বুঝতে পারি যে আপনি সি ++ উদাহরণ চাইছেন, যদি আপনি কিউটি বা অন্য কোনও লাইব্রেরি ব্যবহার করেন তবে তাতে কিছু আসে যায় না। প্রশ্নটি এটিকে পরিষ্কার করার জন্য আপনি সম্পাদনা করতে পারেন ?. (বিটিডাব্লু: ityক্য 2 ডি কিউটি দিয়ে তৈরি করা হয়েছে),
জাভিয়ের রিভেরা

ঠিক আছে তবে ... আমি সি ++ :) এর জন্য একটি উদাহরণ বলতে চাইছি
কেভি

উত্তর:


6

আমি কিউটিও শিখছি এবং কিউটিতে ইউনিটি এপিআই ব্যবহার করার উপায় অনুসন্ধান করার চেষ্টা করেছি, আমি কেবল ডিবিস এপিআই ব্যবহার করতে পারলাম, তবে কুইকলিস্টের সাথে ভাগ্য নেই যেহেতু এটির একটি ডিবাসাসেনু দরকার এবং এটি কীভাবে প্রয়োগ করা যায় তা আমি জানি না (এখনও শিখছি :) )।

এটি আমার নিজের জন্য তৈরি করা উদাহরণ এবং আমি আশা করি এটি অন্যদের জন্য কার্যকর। হতে পারে ইউনিটি ডেভস এতে নতুন কোড (কুইকলিস্ট) সংশোধন / ঠিক করতে / যুক্ত করতে সহায়তা করতে পারে :)

/*
    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


আমার সি ++ তে কোনও অভিজ্ঞতা নেই, তবে আপনি কেন কেবল উদারতা আমদানি করেন না (# অন্তর্ভুক্ত </ক্য / unityক্য / .hক্য।>) এবং এপিআই ব্যবহার করবেন না?
জাভিয়ের রিভেরা

ধন্যবাদ শিয়াল। এটি একটি কবজির মতো কাজ করে :) সবার জন্য সতর্কতা: প্রথম পদক্ষেপটি ভুলে যাবেন না (যেমন আমি করেছি), অন্যথায় এটি কাজ করবে না। :) (প্রথম পদক্ষেপ: আপনার কিউটি প্রকল্পের ফাইলে এই লাইনটি যুক্ত করুন। প্রকল্প QT += dbus)
কেভি

@ জাভিয়েরিভেরা: আমি স্বাধীনতা আমদানির চেষ্টা করেছি, কিন্তু এটি unityক্য খুঁজে পায় না। আমি আমদানি করতে পারি এমন এক টন লাইব্রেরি রয়েছে (স্বতঃপূরণ ফাংশন অনুযায়ী), তবে unityক্য নামে কোনও লাইব্রেরি নেই।
কেভি

1
ওফফ, আমি স্বাধীনতা-দেব ইনস্টল করতে ভুলে গেছি। তবে এখন, glib.h ( /usr/include/unity/unity/unity.h:7: error: glib.h: No such file or directory) এর সাথে আরও একটি সমস্যা রয়েছে তবে আমি libglib2.0-devইনস্টল করেছি।
কেভি

2
@ জাভিয়ের রিভেরা: কিউলিবারি সাহায্যের সাথে আমি উদারতাটি ব্যবহার করার চেষ্টা করেছি তবে ডিবিস এপিআই দিয়ে একই ফলাফলটি পৌঁছাতে অনেক প্রচেষ্টা প্রয়োজন।
শিয়াল

4

Qt C ++ থেকে লঞ্চার কার্যকারিতা অ্যাক্সেসের জন্য বর্তমানে নির্দিষ্ট গ্রন্থাগার নেই। এখানে একটি লাইব্রেরি লাইব্রেরি আছে তবে এটি প্রচুর গ্লিব ওরিয়েন্টেড তাই Qt- এর তুলনায় অপেক্ষাকৃত অসমর্থিত। অন্য উত্তরে উল্লিখিত হিসাবে, লঞ্চারের সাথে সংহত করার সবচেয়ে সুবিধাজনক উপায় হ'ল নিম্ন স্তরের ডিবিএস এপিআই ব্যবহার করা

লঞ্চারের সাথে কীভাবে সংহত করা যায় তার মূল ধারণাটি হ'ল আপনি একটি অ্যাপ্লিকেশন আইডি এবং বৈশিষ্ট্যগুলির সেট সহ লঞ্চগুলিতে একটি সংকেত প্রেরণ করেন। অ্যাপ্লিকেশন আইডি হ'ল ডেস্কটপ ফাইলের ফাইলের নাম, সাধারণত এতে সঞ্চিত থাকে /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] যুক্ত করতে মেনুটির [addAction] (HTTP: //qt-project.org/doc/qt-5.0/qtwidgets/qmenu.html#addAction) পদ্ধতিটি ব্যবহার করুন /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
}

উদাহরণ প্রয়োগ

কিউটি থেকে সমস্ত লঞ্চার কার্যকারিতা ব্যবহার করে একটি সম্পূর্ণ উদাহরণ দেখতে, এই গিথুব প্রকল্পটি দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.