Qtとスクリプト


はじめてのQtアプリです。画面にHello Worldを表示してから、ECMAScriptを評価した結果をログに保存します。

Hello Worldの部分は、雛形のプロジェクトに含まれていたままで、ECMAScriptの評価の部分だけマニュアルを眺めながら書きました。C++のコードからECMAScriptを実行し、その結果をJSON形式で受け取る例です。

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtScript>
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine appEngine;
appEngine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QScriptEngine scriptEngine;
QString script = "var x = { a: true, b: 'c', c: 7, d: [ 1, 2, 3 ] }; JSON.stringify(x, null, 2);";
QJsonDocument json = QJsonDocument::fromJson(scriptEngine.evaluate(script).toString().toUtf8());
QJsonObject x = json.object();
qDebug() << "a: " << x["a"].toBool() << ", b: " << x["b"].toString() << ", c: " << x["c"].toInt();
auto arr = x["d"].toArray();
qDebug("d:");
for (int i = 0; i < arr.size(); i++) {
qDebug() << " " << arr[i].toInt();
}
return app.exec();
}

view raw
main.cxx
hosted with ❤ by GitHub

これまでは、Node.jsを起動してJSON形式のファイルに保存したものをC++で読み込んで構文解析していたので、かなり簡素化できます。