このコードを呼び出すと:
QScriptEngine e;
e.evaluate("print('hello, world!')");
(printメソッドからの)出力テキストは、メインアプリケーションの端末に書き込まれます。
カスタムQIODeviceにリダイレクトする方法はありますか?
print()
独自の実装に置き換えることができます。
まず、必要なことを実行するC++関数を定義します。この場合、説明のために空になっています。
QScriptValue myPrint( QScriptContext * ctx, QScriptEngine * eng ) {
return QScriptValue();
}
次に、その関数を新しいものとしてインストールしますprint()
。
QScriptEngine e = ...;
e.globalObject().setProperty( "print", e.newFunction( &myPrint ) );
e.evaluate( "print(21);" ); // prints nothing
出力テキストはstdoutに送られるため、stdoutをリダイレクトする必要があります。アイデアについては、この質問を参照してください。最良のアイデア:reopenを使用してFILE *にリダイレクトするか、(より良い)rdbufを使用してstdoutをstd :: ostreamから派生した他のストリームにリダイレクトし、QFile.open(1、...)-で遊ぶことができます。