Atualização: para 14.04, veja a resposta muito simplificada de int_ua.
Texto original:
Em http://talk.maemo.org/showthread.php?t=87580, há uma visão geral básica de como adicionar a extensão ao QML. Decidi tentar usando o ubuntu-sdk, que é um pouco diferente. Vou documentar abaixo.
Para este projeto, selecionei o Ubuntu Touch / UI simples com C ++ Backend no QtCreator. Isso cria um projeto com duas partes separadas, o backend e o touchui frontend, escritos em QML. No back-end, adicionaremos dois arquivos para a 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;
}
Essa classe simplesmente usa QProcess para executar um programa, aguarda o término, lê seu stdout e o retorna como uma string.
Em seguida, precisamos modificar o backend / backend.cpp para incluir a classe. Isso requer duas linhas. Anexe um include:
#include "launcher.h"
e em BackendPlugin :: registerTypes adicione uma linha:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
Já deve haver uma linha para MyType, que é o exemplo incluído. Depois disso, poderemos criar o back-end. A única coisa que resta é usá-lo no arquivo main.qml. Para isso, adicionei uma linha:
Launcher { id: myLauncher }
e para o manipulador onClick do Button, defina:
myType.helloWorld = myLauncher.launch("date");
Neste ponto, tudo o que resta é iniciá-lo e testá-lo. Aqui foi onde encontrei um problema, já que o QtCreator parece não configurar tudo corretamente por padrão. Como solução alternativa, no terminal, navegue até o diretório do projeto QtCreator e:
mkdir -p Ubuntu/Example
Em seguida, copie o arquivo libUbuntuExample.so do ProjectBuildDir / back-end para o Ubuntu / Example e o arquivo qmldir do ProjectName / back-end / qmldir. Então você pode executar:
qmlscene -I . ProjectName/touchui/main.qml
Tenho certeza de que provavelmente existe uma maneira simples de manipular tudo isso, para que o Build / Run funcione.