私はこのコードを呼び出す:QtScript出力リダイレクト
QScriptEngine e;
e.evaluate("print('hello, world!')");
(印刷方法)から出力テキストは、メインアプリケーションの端末に書き込まれます。
カスタムQIODeviceにリダイレクトする方法はありますか?
私はこのコードを呼び出す:QtScript出力リダイレクト
QScriptEngine e;
e.evaluate("print('hello, world!')");
(印刷方法)から出力テキストは、メインアプリケーションの端末に書き込まれます。
カスタム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をリダイレクトする必要があります。アイデアについてはquestionをご覧ください。ベストアイデア:FILE *にリダイレクトするためにreopenを使用するか、stdoutをstd :: ostreamから派生した別のストリームにリダイレクトするためにrdbufを使用すると、QFile.open(1、...)で再生できる -
テキストの多くは、他の(QWarningsを、QDebugはstderrに、stdoutに行き、ありますprintf/scanfなど)。 QScriptEngineの出力のみをリダイレクトする必要があります... – Arenim