2011-01-06 3 views
4

Quand j'appelle ce code:redirection de sortie QtScript

QScriptEngine e; 
e.evaluate("print('hello, world!')"); 

le texte de sortie (de la méthode d'impression) est écrit au terminal de l'application principale.

Est-il possible de rediriger vers une QIODevice personnalisée?

Répondre

5

Vous pouvez remplacer print() par votre propre implémentation:

D'abord, définissez une fonction C++ qui fait ce que vous voulez. Dans ce cas, il est juste vide pour l'exposition:

QScriptValue myPrint(QScriptContext * ctx, QScriptEngine * eng) { 
    return QScriptValue(); 
} 

Installez ensuite cette fonction comme nouveau print():

QScriptEngine e = ...; 
e.globalObject().setProperty("print", e.newFunction(&myPrint)); 
e.evaluate("print(21);"); // prints nothing 
1

Le texte vers STDOUT, vous devez donc rediriger stdout. Pour des idées voir ceci question. Meilleures idées: utilisez rouvrir pour rediriger vers un FICHIER *, ou (mieux) utiliser rdbuf pour rediriger stdout vers un autre flux dérivé de std :: ostream, et vous pouvez jouer avec QFile.open (1, ...) -

+0

Il y a beaucoup de textes, allant stdout (QWarnings, QDebug à stderr, autre printf/scanf etc). Je dois rediriger uniquement la sortie de QScriptEngine ... – Arenim

Questions connexes