Aktualizacja: 14.04 zobacz znacznie uproszczoną odpowiedź int_ua.
Oryginalny tekst:
Na stronie http://talk.maemo.org/showthread.php?t=87580 znajduje się podstawowy przegląd dodawania rozszerzenia do QML. Postanowiłem spróbować zamiast tego za pomocą ubuntu-sdk, co jest nieco inne. Udokumentuję poniżej.
Do tego projektu wybrałem Ubuntu Touch / Simple UI z C ++ Backend w QtCreator. Tworzy to projekt z dwiema oddzielnymi częściami: backendem i frontonem touchui napisanym w QML. Do backendu dodamy dwa pliki dla klasy 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;
}
Ta klasa po prostu używa QProcess do wykonania programu, czeka na zakończenie, odczytuje standardowe wyjście i zwraca jako ciąg znaków.
Następnie musimy zmodyfikować backend / backend.cpp, aby uwzględnić klasę. Wymaga to dwóch linii. Dołącz dołącz:
#include "launcher.h"
i w BackendPlugin :: registerTypes dodaj linię:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
Powinien już być wiersz dla MyType, który jest dołączonym przykładem. Po tym powinniśmy być w stanie zbudować backend. Pozostaje tylko użyć go w pliku main.qml. W tym celu dodałem wiersz:
Launcher { id: myLauncher }
i w module obsługi onClick przycisku ustaw:
myType.helloWorld = myLauncher.launch("date");
W tym momencie pozostaje tylko uruchomienie i przetestowanie. Tutaj natknąłem się na problem, ponieważ QtCreator nie wydaje się domyślnie konfigurować wszystkiego poprawnie. W miarę obejścia tego problemu w terminalu przejdź do katalogu projektu QtCreator i:
mkdir -p Ubuntu/Example
Następnie skopiuj plik libUbuntuExample.so z ProjectBuildDir / backend do Ubuntu / Example, a plik qmldir z ProjectName / backend / qmldir. Następnie możesz uruchomić:
qmlscene -I . ProjectName/touchui/main.qml
Jestem pewien, że istnieje prawdopodobnie prosty sposób, aby wszystko to spreparować, więc Build / Run po prostu działa.