अद्यतन: 14.04 के लिए int_ua द्वारा बहुत सरल उत्तर देखें।
मूल लेख:
पर http://talk.maemo.org/showthread.php?t=87580 वहाँ कैसे QML एक्सटेंशन जोड़ना की एक बुनियादी अवलोकन है। मैंने इसे ubuntu-sdk के बजाय एक शॉट देने का फैसला किया, जो थोड़ा अलग है। मैं नीचे दस्तावेज़ हूँ।
इस परियोजना के लिए मैंने QtCreator में C ++ बैकएंड के साथ Ubuntu Touch / Simple UI का चयन किया । यह दो अलग-अलग हिस्सों के साथ एक प्रोजेक्ट बनाता है, क्यूएमएल में लिखा बैकएंड और टचुई फ्रंटेंड। बैकएंड के लिए हम लॉन्चर क्लास के लिए दो फाइलें जोड़ने जा रहे हैं।
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;
}
यह वर्ग बस प्रोग्राम को निष्पादित करने के लिए QProcess का उपयोग करता है, इसके समाप्त होने की प्रतीक्षा करता है, इसके स्टडआउट को पढ़ता है, और इसे एक स्ट्रिंग के रूप में लौटाता है।
आगे हमें कक्षा को शामिल करने के लिए बैकएंड / बैकएंड को संशोधित करना होगा। इसके लिए दो लाइनों की आवश्यकता होती है। एक में शामिल करें:
#include "launcher.h"
और BackendPlugin :: registerTypes में एक पंक्ति जोड़ें:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
MyType के लिए पहले से ही एक पंक्ति होनी चाहिए, जो कि शामिल उदाहरण है। इसके बाद हमें बैकएंड बनाने में सक्षम होना चाहिए। केवल एक चीज जो बनी हुई है, वह इसे main.qml फ़ाइल में उपयोग करना है। इसके लिए मैंने एक पंक्ति जोड़ी:
Launcher { id: myLauncher }
और बटन पर क्लिक करें हैंडलर, सेट करें:
myType.helloWorld = myLauncher.launch("date");
इस बिंदु पर जो कुछ भी बचा हुआ है, उसे शुरू करना है और उसका परीक्षण करना है। यहाँ है जहाँ मैं एक समस्या में भाग गया, क्योंकि QtCreator डिफ़ॉल्ट रूप से सब कुछ ठीक से सेट नहीं करता है। जैसा कि मैंने वर्कअराउंड किया, टर्मिनल में अपने QtCreator प्रोजेक्ट डायरेक्टरी में जाएँ और:
mkdir -p Ubuntu/Example
तब ProjectBuildDir / backend से Ubuntu / Example, और ProjectName / backend / qmldir से qmldir फ़ाइल से libUbuntuExample.so फ़ाइल की प्रतिलिपि बनाएँ। तब आप चला सकते हैं:
qmlscene -I . ProjectName/touchui/main.qml
मुझे यकीन है कि इस सब को रिग करने का एक सरल तरीका है इसलिए बिल्ड / रन बस काम करता है।