Обновление: для 14.04 см. Намного упрощенный ответ от int_ua.
Первоначальный текст:
На http://talk.maemo.org/showthread.php?t=87580 приведен общий обзор того, как добавить расширение в QML. Я решил попробовать, используя вместо этого ubuntu-sdk, который немного отличается. Я документирую ниже.
Для этого проекта я выбрал Ubuntu Touch / Simple UI с C ++ Backend в QtCreator. Это создает проект с двумя отдельными частями, бэкендом и внешним интерфейсом touchui, написанным на QML. К бэкэнду мы добавим два файла для класса 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;
}
Этот класс просто использует QProcess для выполнения программы, ожидает ее завершения, читает ее стандартный вывод и возвращает ее в виде строки.
Далее нам нужно изменить backend / backend.cpp, чтобы включить класс. Это требует двух строк. Добавить включение:
#include "launcher.h"
и в BackendPlugin :: registerTypes добавьте строку:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
Там уже должна быть строка для MyType, который является включенным примером. После этого мы сможем построить бэкэнд. Остается только использовать его в файле main.qml. Для этого я добавил строку:
Launcher { id: myLauncher }
и для обработчика кнопки onClick установите:
myType.helloWorld = myLauncher.launch("date");
На данный момент все, что остается, это запустить его и проверить. Здесь я столкнулся с проблемой, так как QtCreator, похоже, не все правильно настроил по умолчанию. В качестве обходного пути, в терминале перейдите в каталог вашего проекта QtCreator и:
mkdir -p Ubuntu/Example
Затем скопируйте файл libUbuntuExample.so из ProjectBuildDir / backend в Ubuntu / Example и файл qmldir из ProjectName / backend / qmldir. Тогда вы можете запустить:
qmlscene -I . ProjectName/touchui/main.qml
Я уверен, что, возможно, есть простой способ настроить все это, поэтому Build / Run просто работает.