Aggiornamento: per 14.04 vedi la risposta molto semplificata di int_ua.
Testo originale:
A http://talk.maemo.org/showthread.php?t=87580 c'è una panoramica di base su come aggiungere l'estensione a QML. Ho deciso di fare un tentativo usando Ubuntu-SDK, che è leggermente diverso. Documenterò di seguito.
Per questo progetto ho selezionato Ubuntu Touch / Simple UI con C ++ Backend in QtCreator. Questo crea un progetto con due parti separate, il backend e il frontend touchui scritti in QML. Al backend aggiungeremo due file per la classe Launcher.
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;
}
Questa classe usa semplicemente QProcess per eseguire un programma, aspetta che finisca, legge il suo stdout e lo restituisce come una stringa.
Successivamente è necessario modificare backend / backend.cpp per includere la classe. Ciò richiede due righe. Aggiungi un'inclusione:
#include "launcher.h"
e in BackendPlugin :: registerTypes aggiungi una riga:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
Dovrebbe esserci già una riga per MyType, che è l'esempio incluso. Dopo questo dovremmo essere in grado di costruire il backend. L'unica cosa che rimane è usarlo nel file main.qml. Per questo ho aggiunto una riga:
Launcher { id: myLauncher }
e al gestore onClick di Button, impostare:
myType.helloWorld = myLauncher.launch("date");
A questo punto non resta che avviarlo e testarlo. Qui è dove ho riscontrato un problema, dal momento che QtCreator non sembra impostare tutto correttamente per impostazione predefinita. Mentre risolvo il problema, nel terminale vai alla directory del tuo progetto QtCreator e:
mkdir -p Ubuntu/Example
Quindi copiare il file libUbuntuExample.so da ProjectBuildDir / backend su Ubuntu / Esempio e il file qmldir da ProjectName / backend / qmldir. Quindi puoi eseguire:
qmlscene -I . ProjectName/touchui/main.qml
Sono sicuro che probabilmente c'è un modo semplice per sistemare tutto così Build / Run funziona.