Обновление: для 14.04 см. упрощенный ответ by int_ua.
Обновление: для 14.04 см. упрощенный ответ by 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 для выполнения программы, ждет ее завершения, считывает ее stdout и возвращает ее как строку.
Далее нам нужно изменить backend / backend.cpp, чтобы включить класс. Это требует двух строк. Добавить include:
#include "launcher.h"
, а в BackendPlugin :: registerTypes добавить строку:
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
. Должна быть строка MyType, которая является приведенным в примере. После этого мы сможем построить бэкэнд. Остается только использовать его в файле main.qml. Для этого я добавил строку:
Launcher { id: myLauncher }
и обработчик onClick Button:
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 просто работал.
Наконец, ссылка на ремонт исправления устраняет мою проблему, теперь я могу войти в систему, но меню GNU Grub вызывает даже после перезагрузки, также я заметил, что когда я открываю терминал, он отображает $ только в отличие от root@user:~$ и что Ubuntu работает медленно для загрузки, а также при открытии приложений!