更新:14.04については、int_uaによる非常に簡略化された回答を参照してください。
元のテキスト:
でhttp://talk.maemo.org/showthread.php?t=87580 QMLに拡張子を追加する方法の基本的な概要があります。代わりにubuntu-sdkを使用してショットを作成することにしましたが、これは少し異なります。以下に文書化します。
このプロジェクトでは、QtCreatorでUbuntu Touch / Simple UI with C ++ Backendを選択しました。これにより、QMLで記述されたバックエンドとtouchuiフロントエンドの2つの別個の部分を持つプロジェクトが作成されます。バックエンドに、Launcherクラスの2つのファイルを追加します。
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を変更してクラスを含める必要があります。これには2行が必要です。インクルードを追加します。
#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
おそらく、これをすべてリグする簡単な方法があるので、ビルド/実行が機能するはずです。