0

[質問]

QScriptEngine次のスクリプトでフィードするとします。

var foo = 1;
var bar = 2;
foo + bar

によってQScriptEngine::evaluate()、3 に等しい値にQScriptValue戻すことができる戻り値が得られます。int

一方、QScriptEngineスクリプトを使用すると、次のようになります。

var foo = 1;
var bar = 2;

では、ヒープ上のスクリプトによって作成された値fooにアクセスするにはどうすればよいでしょうか?bar

[例]

ここに画像の説明を入力

例として MATLAB (Python IDLE も同じ) を取り上げます。スクリプト ファイルを読み取ることができ、スクリプトによって作成された変数は引き続きコマンド プロンプトで使用できます。

私はQtで同じことをすることを考えています:

  1. スクリプトファイルを読み込んでQString
  2. QScriptEngine::evaluate()を評価するために呼び出しますQString

varしかし、スクリプトによって作成されたものを取得する方法がわかりません。

PSスクリプトは非常に複雑になる可能性があり、変数だけを争うだけでなく、質問をより簡単にしようとしています。

4

1 に答える 1

2

変数がグローバルの場合、グローバル オブジェクトで(globalObject()メソッドを介して) アクセスできます。ドキュメントから:

...スクリプト コード内の非ローカル変数は、グローバル オブジェクトのプロパティとして作成され、グローバル コード内のローカル変数と同様に作成されます。

つまり、グローバル オブジェクトを取得し、そのプロパティを繰り返し処理して、 property()メソッドで値を読み取る必要があります (スクリプトの変数のみを使用する必要があることに注意してください)。

QScriptValueIterator it(engine.globalObject());
 while (it.hasNext()) {
     it.next();
     qDebug() << it.name() << ": " << it.value().toString();
 }
于 2014-12-18T08:59:42.970 に答える