4

このコードを呼び出すと:

QScriptEngine e;
e.evaluate("print('hello, world!')");

(printメソッドからの)出力テキストは、メインアプリケーションの端末に書き込まれます。

カスタムQIODeviceにリダイレクトする方法はありますか?

4

2 に答える 2

5

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
于 2011-04-20T15:58:31.850 に答える
1

出力テキストはstdoutに送られるため、stdoutをリダイレクトする必要があります。アイデアについては、この質問を参照してください。最良のアイデア:reopenを使用してFILE *にリダイレクトするか、(より良い)rdbufを使用してstdoutをstd :: ostreamから派生した他のストリームにリダイレクトし、QFile.open(1、...)-で遊ぶことができます。

于 2011-01-06T20:11:02.567 に答える