2011-01-06 8 views
4

私はこのコードを呼び出す:QtScript出力リダイレクト

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

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

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

答えて

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 
1

出力テキストはstdoutに送られるので、stdoutをリダイレクトする必要があります。アイデアについてはquestionをご覧ください。ベストアイデア:FILE *にリダイレクトするためにreopenを使用するか、stdoutをstd :: ostreamから派生した別のストリームにリダイレクトするためにrdbufを使用すると、QFile.open(1、...)で再生できる -

+0

テキストの多くは、他の(QWarningsを、QDebugはstderrに、stdoutに行き、ありますprintf/scanfなど)。 QScriptEngineの出力のみをリダイレクトする必要があります... – Arenim

関連する問題