【发布时间】:2011-06-04 12:31:43
【问题描述】:
当我调用这段代码时:
QScriptEngine e;
e.evaluate("print('hello, world!')");
输出文本(来自 print 方法)被写入主应用程序的终端。
有没有办法将其重定向到自定义 QIODevice?
【问题讨论】:
当我调用这段代码时:
QScriptEngine e;
e.evaluate("print('hello, world!')");
输出文本(来自 print 方法)被写入主应用程序的终端。
有没有办法将其重定向到自定义 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
【讨论】:
输出文本进入标准输出,因此您需要重定向标准输出。有关想法,请参阅question。最佳想法:使用重新打开重定向到 FILE*,或者(更好)使用 rdbuf 将标准输出重定向到从 std::ostream 派生的其他流,您可以使用 QFile.open(1,...)-
【讨论】: