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

输出文本进入标准输出,因此您需要重定向标准输出。有关想法,请参阅此问题。最佳想法:使用重新打开重定向到 FILE*,或者(更好)使用 rdbuf 将标准输出重定向到从 std::ostream 派生的其他流,您可以使用 QFile.open(1,...)-

于 2011-01-06T20:11:02.567 回答