当我调用此代码时:
QScriptEngine e;
e.evaluate("print('hello, world!')");
输出文本(来自print方法)被写入主应用程序的终端。
有没有办法将其重定向到自定义QIODevice?
答案 0 :(得分: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 :(得分:1)
输出文本转到stdout,因此您需要重定向stdout。有关想法,请参阅此question。最好的想法:使用reopen重定向到FILE *,或者(更好)使用rdbuf将stdout重定向到从std :: ostream派生的其他流,你可以使用QFile.open(1,...) -