Перенаправление вывода QtScript - PullRequest
4 голосов
/ 06 января 2011

Когда я вызываю этот код:

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

выходной текст (из метода печати) записывается в терминал основного приложения.

Есть ли способ перенаправить его на пользовательский QIODevice

Ответы [ 2 ]

5 голосов
/ 20 апреля 2011

Вы можете заменить 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 голос
/ 06 января 2011

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

...