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

Выходной текст выводится на стандартный вывод, поэтому вам необходимо перенаправить stdout. Для идей см. Это question. Лучшие идеи: используйте повторно открывать для перенаправления на FILE * или (лучше) использовать rdbuf для перенаправления stdout на другой поток, полученный из std :: ostream, и вы можете играть с QFile.open (1, ...) -

+0

Есть еще много текстов, идя на стандартный вывод (QWarnings, QDebug на стандартный вывод, других printf/scanf и т. д.). Мне нужно перенаправить только вывод QScriptEngine ... – Arenim