আপডেট: 14.04 এর জন্য int_ua দ্বারা অনেক সরলিকৃত উত্তর দেখুন।
মূল পাঠ্য:
Http://talk.maemo.org/showthread.php?t=87580 এ কিউএমএলে এক্সটেনশনটি কীভাবে যুক্ত করা যায় তার একটি প্রাথমিক ওভারভিউ রয়েছে। আমি পরিবর্তে উবুন্টু-এসডিকে ব্যবহার করে এটি শট দেওয়ার সিদ্ধান্ত নিয়েছি, যা কিছুটা আলাদা। আমি নীচে নথি করব।
এই প্রকল্পের জন্য আমি কিউটিক্রিটারে সি ++ ব্যাকএন্ডের সাথে উবুন্টু টাচ / সিম্পল ইউআই নির্বাচন করেছি । এটি দুটি পৃথক অংশ, কিউএমএলে লিখিত ব্যাকএন্ড এবং টাচুই ফ্রন্ট্যান্ড সহ একটি প্রকল্প তৈরি করে। ব্যাকএন্ডে আমরা লঞ্চার ক্লাসের জন্য দুটি ফাইল যুক্ত করতে যাচ্ছি।
launcher.h:
#ifndef LAUNCHER_H
#define LAUNCHER_H
#include <QObject>
#include <QProcess>
class Launcher : public QObject
{
Q_OBJECT
public:
explicit Launcher(QObject *parent = 0);
Q_INVOKABLE QString launch(const QString &program);
private:
QProcess *m_process;
};
#endif // LAUNCHER_H
launcher.cpp:
#include "launcher.h"
Launcher::Launcher(QObject *parent) :
QObject(parent),
m_process(new QProcess(this))
{
}
QString Launcher::launch(const QString &program)
{
m_process->start(program);
m_process->waitForFinished(-1);
QByteArray bytes = m_process->readAllStandardOutput();
QString output = QString::fromLocal8Bit(bytes);
return output;
}
এই শ্রেণিটি কেবল কোনও প্রোগ্রাম চালানোর জন্য কিউপ্রসেস ব্যবহার করে, এটি শেষ হওয়ার জন্য অপেক্ষা করে, তার স্টাডআউটটি পড়ে এবং স্ট্রিং হিসাবে ফেরত দেয়।
এরপরে ক্লাসটি অন্তর্ভুক্ত করতে আমাদের ব্যাকএন্ড / ব্যাকএন্ডএপিপি পরিবর্তন করতে হবে। এর জন্য দুটি লাইন দরকার। একটি অন্তর্ভুক্ত অন্তর্ভুক্ত:
#include "launcher.h"
এবং ভিতরে ব্যাকএন্ডপ্লাগিনে :: নিবন্ধের টাইপগুলি একটি লাইন যুক্ত করে:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
মাইটাইপের জন্য ইতিমধ্যে একটি লাইন থাকা উচিত, যা অন্তর্ভুক্ত উদাহরণ। এর পরে আমাদের ব্যাকএন্ডটি তৈরি করতে সক্ষম হওয়া উচিত। মেন.কিউএমএল ফাইলটিতে এটি ব্যবহার করা কেবল একমাত্র জিনিস। এর জন্য আমি একটি লাইন যুক্ত করেছি:
Launcher { id: myLauncher }
এবং বাটনের অন ক্লিক হ্যান্ডলারের কাছে সেট করুন:
myType.helloWorld = myLauncher.launch("date");
এই মুহুর্তে যা অবশিষ্ট রয়েছে তা হল এটি শুরু করা এবং এটি পরীক্ষা করা test এখানেই আমি একটি সমস্যার মধ্যে পড়েছিলাম, কেননা QtCreator ডিফল্টরূপে সবকিছু ঠিকঠাক করে দেয় বলে মনে হয় না। আমি যেমন কাজ করি, টার্মিনালে আপনার QtCretor প্রকল্প ডিরেক্টরিতে নেভিগেট করুন এবং:
mkdir -p Ubuntu/Example
তারপরে libUbuntuExample.so ফাইলটি প্রজেক্টবিল্ডডির / ব্যাকএন্ড থেকে উবুন্টু / উদাহরণে এবং qmldir ফাইলটি প্রজেক্টনাম / ব্যাকএন্ড / qmldir থেকে অনুলিপি করুন। তারপরে আপনি চালাতে পারবেন:
qmlscene -I . ProjectName/touchui/main.qml
আমি নিশ্চিত যে এগুলি ছড়িয়ে দেওয়ার সম্ভবত একটি সহজ উপায় আছে তাই বিল্ড / রান কেবল কাজ করে।