Update: Für 14.04 siehe die stark vereinfachte Antwort von int_ua.
Original Text:
Unter http://talk.maemo.org/showthread.php?t=87580 finden Sie eine grundlegende Übersicht über das Hinzufügen der Erweiterung zu QML. Ich habe beschlossen, es mit dem Ubuntu-SDK zu versuchen, was etwas anders ist. Ich werde unten dokumentieren.
Für dieses Projekt habe ich Ubuntu Touch / Simple UI mit C ++ Backend in QtCreator ausgewählt. Dadurch wird ein Projekt mit zwei separaten Teilen erstellt, dem Backend und dem Touchui-Frontend, die in QML geschrieben sind. Im Backend werden wir zwei Dateien für die Launcher-Klasse hinzufügen.
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;
}
Diese Klasse verwendet einfach QProcess, um ein Programm auszuführen, wartet, bis es beendet ist, liest die Standardausgabe und gibt sie als Zeichenfolge zurück.
Als nächstes müssen wir backend / backend.cpp ändern, um die Klasse einzuschließen. Dies erfordert zwei Zeilen. Füge ein Include hinzu:
#include "launcher.h"
und in BackendPlugin :: registerTypes füge eine Zeile hinzu:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
Für MyType sollte bereits eine Zeile vorhanden sein. Dies ist das mitgelieferte Beispiel. Danach sollten wir das Backend erstellen können. Sie müssen es nur noch in der Datei main.qml verwenden. Dazu habe ich eine Zeile hinzugefügt:
Launcher { id: myLauncher }
und setzen Sie im onClick-Handler des Buttons:
myType.helloWorld = myLauncher.launch("date");
An diesem Punkt muss es nur noch gestartet und getestet werden. Hier ist ein Problem aufgetreten, da QtCreator anscheinend nicht alle Einstellungen standardmäßig korrekt vornimmt. Navigieren Sie zur Umgehung des Problems im Terminal zu Ihrem QtCreator-Projektverzeichnis und:
mkdir -p Ubuntu/Example
Kopieren Sie dann die Datei libUbuntuExample.so von ProjectBuildDir / backend nach Ubuntu / Example und die Datei qmldir von ProjectName / backend / qmldir. Dann kannst du laufen:
qmlscene -I . ProjectName/touchui/main.qml
Ich bin mir sicher, dass es wahrscheinlich einen einfachen Weg gibt, dies alles zu manipulieren, damit Build / Run einfach funktioniert.