업데이트 : 14.04의 경우 int_ua의 단순화 된 답변을 참조하십시오.
원문 :
에서 http://talk.maemo.org/showthread.php?t=87580 QML에 확장자를 추가하는 방법에 대한 기본 개요가있다. 대신 우분투 SDK를 사용하여 촬영하기로 결정했습니다. 이는 약간 다릅니다. 아래에 문서화하겠습니다.
이 프로젝트를 위해 내가 선택한 QtCreator에서 C ++ 백엔드가 있는 Ubuntu Touch / Simple UI를 했습니다. QML로 작성된 백엔드와 touchui 프론트 엔드의 두 부분으로 구성된 프로젝트가 생성됩니다. 백엔드에 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 "launcher.h"
과에 BackendPlugin :: registerTypes이 줄을 추가 :
qmlRegisterType<Launcher>(uri, 1, 0, "Launcher");
포함 된 예제 인 MyType에 대한 행이 이미 있어야합니다. 이 후 우리는 백엔드를 구축 할 수 있어야합니다. 남아있는 유일한 것은 main.qml 파일에서 사용하는 것입니다. 이를 위해 줄을 추가했습니다.
Launcher { id: myLauncher }
Button의 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이 작동합니다.