2011-01-06 48 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

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

+0

这里有大量的文本,去到​​stdout(QWarnings,QDebug到stderr,其他在这种情况下,它只是为空博览会printf/scanf等)。我只需要重定向QScriptEngine的输出...... – Arenim 2011-01-07 12:22:40