Mise à jour: pour 14.04 voir la réponse très simplifiée par int_ua.
Texte original:
Sur http://talk.maemo.org/showthread.php?t=87580, vous trouverez un aperçu de base sur la façon d'ajouter l'extension à QML. J'ai décidé de lui donner une photo en utilisant ubuntu-sdk à la place, ce qui est légèrement différent. Je documenterai ci-dessous.
Pour ce projet, j'ai sélectionné Ubuntu Touch / Simple UI avec C ++ Backend dans QtCreator. Cela crée un projet avec deux parties distinctes, le backend et le touchui frontend écrit en QML. Au backend, nous allons ajouter deux fichiers pour 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;
}
Cette classe utilise simplement QProcess pour exécuter un programme, attend qu'il se termine, lit sa sortie standard et la renvoie sous forme de chaîne.
Ensuite, nous devons modifier backend / backend.cpp pour inclure la classe. Cela nécessite deux lignes. Ajoutez une inclusion:
#include "launcher.h"
et dans BackendPlugin :: registerTypes ajoutez une ligne:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
Il devrait déjà y avoir une ligne pour MyType, qui est l'exemple inclus. Après cela, nous devrions pouvoir construire le backend. Il ne reste plus qu'à l'utiliser dans le fichier main.qml. Pour cela j'ai ajouté une ligne:
Launcher { id: myLauncher }
et au gestionnaire onClick du bouton, définissez:
myType.helloWorld = myLauncher.launch("date");
À ce stade, il ne reste plus qu'à le démarrer et à le tester. Voici où j'ai rencontré un problème, car QtCreator ne semble pas tout configurer correctement par défaut. Pendant que je contourne, dans le terminal, accédez à votre répertoire de projet QtCreator et:
mkdir -p Ubuntu/Example
Copiez ensuite le fichier libUbuntuExample.so de ProjectBuildDir / backend vers Ubuntu / Example et le fichier qmldir de ProjectName / backend / qmldir. Ensuite, vous pouvez exécuter:
qmlscene -I . ProjectName/touchui/main.qml
Je suis sûr qu'il existe probablement un moyen simple de tout régler afin que Build / Run fonctionne.